Architecture of i386 input file is incompatible with i386:x86-64
I'm trying to create a simple kernel using Ubuntu. In the terminal I typed
ld -Ttext 0x1000 -o kernel.bin loader.o main.o Video.o
But I got the following error message in return:
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
Solution 1:
If want compile the file as 32 bits, you can use:
ld -m elf_i386 -s -o file file.o
Solution 2:
Use 64 bits instead of 32 for your loader and compile it with the following command:
nasm -f elf64 loader.asm -o loader.o
This should solve your error
Solution 3:
When compiling/linking 32-bit apps on x86_64, setting emulation to elf_i386
provides the correct elf format. So, for example, if you compile an assembler app with nasm -f elf file.asm -o file.o
, the link command is ld -m elf_i386 -o exename file.o
Courtesy: David