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

MEv*_*2.0 29 linux ld i386

我正在尝试使用Ubuntu创建一个简单的内核.在我打字的终端

    ld -Ttext 0x1000 -o kernel.bin loader.o main.o Video.o
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误消息作为回报:

    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
Run Code Online (Sandbox Code Playgroud)

小智 40

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

ld -m elf_i386 -s -o file file.o
Run Code Online (Sandbox Code Playgroud)

  • 这是解决方案.在x86_64上编译/链接32位应用程序时,将模拟设置为"elf_i386"可提供正确的elf格式.因此,例如,如果使用`nasm -f elf file.asm -o file.o`编译汇编程序应用程序,则链接命令为`ld -m elf_i386 -o exename file.o`. (4认同)
  • 只是不要忘记用`-o file file.o`替换`-o file.o file`. (3认同)

小智 31

对于加载器使用64位而不是32位,并使用以下命令对其进行编译:

nasm -f elf64 loader.asm -o loader.o
Run Code Online (Sandbox Code Playgroud)

这应该可以解决您的错误


4aR*_*gh7 5

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