i386 输入文件的架构与 i386:x86-64 不兼容

问题描述 投票:0回答:6

我正在尝试使用 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
linux ld i386
6个回答
88
投票

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

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

53
投票

为您的加载程序使用 64 位而不是 32 位,并使用以下命令进行编译:

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

这应该可以解决您的错误


7
投票

在 x86_64 上编译/链接 32 位应用程序时,将仿真设置为

elf_i386
可提供正确的 elf 格式。因此,例如,如果您使用
nasm -f elf file.asm -o file.o
编译汇编程序应用程序,则链接命令为
ld -m elf_i386 -o exename file.o
礼貌:大卫


1
投票

我也面临同样的问题,我发现我是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

1
投票

在 Windows 上,我遇到以下问题

ld:输入文件 `file.o' 的 i386 架构与 i386:x86-64 输出不兼容

ld -m i386pe -s -o file.exe file.o,为我工作


-1
投票

当发生以下类型的错误时,解决的选项是 -f elf64

例如)nasm -f elf64 test.asm

错误提示: /usr/bin/ld: 输入文件“test.o”中的 i386 架构与 i386:x86-64 输出不兼容。 收集2:错误:ld返回1退出状态

© www.soinside.com 2019 - 2024. All rights reserved.