我正在尝试使用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)
小智 31
对于加载器使用64位而不是32位,并使用以下命令对其进行编译:
nasm -f elf64 loader.asm -o loader.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
Courtesy:David