MinGW не генерирует объектный файл при компиляции - PullRequest
0 голосов
/ 21 марта 2010

Я только что купил новый ноутбук для себя в путешествии, затем в свободное время я начал тестировать MinGW на нем, пытаясь скомпилировать свою собственную ОС, написанную на C ++.Затем я создал все необходимые файлы и 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. */
}

и попытался скомпилировать его с помощью g ++

G:> g ++ -o C: \kernel.o -c kernel.cpp -Wall -Wextra -Werror -nostdlib -nostartfiles -nodefaultlibs
kernel.cpp: в функции `void _main (multiboot_data *, без знака int) ':
kernel.cpp: 8:предупреждение: неиспользуемая переменная 'boot_loader_name'
kernel.cpp: в глобальном масштабе:
kernel.cpp: 4: предупреждение: неиспользуемый параметр 'magic'

G:>

Но это не создает никакого двоичного файла в C:/>.

Что я могу сделать?

Ответы [ 3 ]

3 голосов
/ 21 марта 2010

Файл не создается, потому что у вас включен -Werror. Предупреждения о неиспользуемых переменных считаются ошибками, поэтому компиляция прерывается. Просто закомментируйте их на данный момент:

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

И это должно хорошо работать. Кроме того, не должен ли _main() быть объявлен просто как main(), а затем разрешено быть "искаженным" в _main() компилятором? Редактировать: Возможно, вы также захотите использовать -c, чтобы пропустить этап связывания, при условии, что вам просто нужны объектные файлы.

1 голос
/ 21 марта 2010

C: \ обычно блокируется для записи в Vista и 7, так как это место считается очень чувствительным, и вам нужно работать от имени администратора, чтобы иметь возможность сделать это (например, явно запуска командная строка или g ++ с правами администратора). То же самое должно применяться, если вы работаете с «обычной» (не администраторской) учетной записью пользователя, даже в XP.

Возможно, это то, что с тобой происходит?

1 голос
/ 21 марта 2010

Вы пытались сначала создать файл .o в локальном каталоге? Какой результат вы получили?

...