i386输入文件的体系结构与i386:x86-64不兼容

时间:2013-10-05 17:00:08

标签: linux ld i386

我正在尝试使用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

4 个答案:

答案 0 :(得分:38)

如果要将文件编译为32位,可以使用:

ld -m elf_i386 -s -o file file.o

答案 1 :(得分:29)

使用64位而不是32位加载器并使用以下命令编译它:

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

这应该可以解决您的错误

答案 2 :(得分:5)

在x86_64上编译/链接32位应用程序时,将模拟设置为elf_i386可提供正确的elf格式。因此,例如,如果使用nasm -f elf file.asm -o file.o编译汇编程序应用程序,则链接命令为ld -m elf_i386 -o exename file.o 礼貌:大卫

答案 3 :(得分:0)

我也遇到了同样的问题,我发现我是32位寄存器(eax,ecx,edx,ebx,esp,ebp,esi,edi)坚持使用64位寄存器(rax,rcx,rdx,rbx, rsp,rbp,rsi,rdi),在我的64位计算机中。 然后使用这些命令来编译我的程序-

nasm -felf64 hello.asm
ld hello.o
./a.out