Nathan Campos
Nathan Campos

Reputation: 29497

MinGW Doesn't Generate an Object File When Compiling

I've just bought a new laptop for me on the travel, then on my free time, I've started to test MinGW on it by trying to compile my own OS that is written in C++, then I've created all the files needed and the kernel.cpp:

extern "C" void _main(struct multiboot_data* mbd, unsigned int magic);
 
void _main( struct multiboot_data* mbd, unsigned int magic )
{
   char * boot_loader_name =(char*) ((long*)mbd)[16];
 
   /* Print a letter to screen to see everything is working: */
   unsigned char *videoram = (unsigned char *) 0xb8000;
   videoram[0] = 65; /* character 'A' */
   videoram[1] = 0x07; /* forground, background color. */
}

And tried to compile it with g++

G:> g++ -o C:\kernel.o -c kernel.cpp -Wall -Wextra -Werror -nostdlib -nostartfiles -nodefaultlibs
kernel.cpp: In function `void _main(multiboot_data*, unsigned int)':
kernel.cpp:8: warning: unused variable 'boot_loader_name'
kernel.cpp: At global scope:
kernel.cpp:4: warning: unused parameter 'magic'

G:>

But it don't create any binary file at C:/>.

What can I do?

Upvotes: 1

Views: 1932

Answers (3)

Jon Purdy
Jon Purdy

Reputation: 54989

It doesn't create the file because you have -Werror enabled. The warnings you're getting about unused variables are counting as errors, so compilation gets aborted. Just comment them out for the moment:

void _main( struct multiboot_data* mbd, unsigned int /* magic */ )
{
    // char * boot_loader_name =(char*) ((long*)mbd)[16];
    // ...
}

And it should build fine. Also, shouldn't _main() be declared as just main() and then allowed to be "mangled" into _main() by the compiler? Edit: You probably also want to be using -c to skip the linking phase, assuming you just want the object files.

Upvotes: 4

Michael Madsen
Michael Madsen

Reputation: 55009

C:\ is usually blocked for writing on Vista and 7, since it's considered a very sensitive location, and you have to run as administrator to be allowed to do that (as in, explicitly launching the command prompt or g++ with admin rights). The same should apply if you're running on a "regular" (non-admin) user account, even in XP.

Perhaps that's what's happening to you?

Upvotes: 1

Eli Bendersky
Eli Bendersky

Reputation: 273526

Did you try creating the .o file in a local directory first? What result did you get?

Upvotes: 1

Related Questions