Ответ 1
Если вы хотите скомпилировать файл как 32-битный, вы можете использовать:
ld -m elf_i386 -s -o file file.o
Я пытаюсь создать простое ядро с помощью Ubuntu. В терминале я набрал
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
Если вы хотите скомпилировать файл как 32-битный, вы можете использовать:
ld -m elf_i386 -s -o file file.o
Используйте 64 бита вместо 32 для вашего загрузчика и скомпилируйте его с помощью следующей команды:
nasm -f elf64 loader.asm -o loader.o
Это должно решить вашу ошибку
При компиляции/связывании 32-разрядных приложений на x86_64 настройка эмуляции на elf_i386
обеспечивает правильный формат эльфа. Так, например, если вы скомпилируете ассемблер с nasm -f elf file.asm -o file.o
, команда link ld -m elf_i386 -o exename file.o
Courtesy: David