2013-10-05 8 views
15

Я пытаюсь создать простое ядро ​​с помощью Ubuntu. В терминале я напечаталАрхитектура входного файла i386 несовместима с i386: x86-64

ld -Ttext 0x1000 -o kernel.bin loader.o main.o Video.o 

Но я получил следующее сообщение об ошибке в ответ:

ld: i386 architecture of input file `loader.o' is incompatible with i386:x86-64 output 
    ld: warning: cannot find entry symbol _start; defaulting to 0000000000001000 

ответ

20

Использование 64 бит вместо 32 для загрузчика и скомпилировать его с помощью следующей команды:

nasm -f elf64 loader.asm -o loader.o 

Это должно решить вашу проблему.

22

Если хотите скомпилировать файл в составе 32 бита, вы можете использовать:

л.д. -m elf_i386 -s -o file.o файл

+4

Это решение. При компиляции/связывании 32-разрядных приложений на x86_64 настройка эмуляции на 'elf_i386' обеспечивает правильный формат эльфа. Так, например, если вы скомпилируете приложение ассемблера с помощью 'nasm -f elf file.asm -o file.o', то команда связи будет' ld -m elf_i386 -o exename file.o'. –

+1

Не забудьте заменить файл '-o file.o'' -o file file.o'. – Ruslan

2

При компиляции/связывания 32-битных приложений на x86_64, установка эмуляцию elf_i386 обеспечивает правильный эльфа формат. Так, например, если вы скомпилируете приложение ассемблера с nasm -f elf file.asm -o file.o, команда связи: ld -m elf_i386 -o exename file.o Предоставлено: David

 Смежные вопросы

  • Нет связанных вопросов^_^