C 用LD链接文件
我阅读了本教程:C 用LD链接文件,c,nasm,ld,C,Nasm,Ld,我阅读了本教程: 我尝试使用教程提供的likerscript链接文件。但是LD给了我一个错误,它不能读取nasm输出的文件。有人知道我做错了什么吗?如果您严格按照所示执行教程,那么问题很可能出现在这里: nasm -f aout kernel_start.asm -o ks.o 这将生成完全过时的a.out格式的对象文件。您可能正在Windows或Linux主机系统上完成本教程;这些系统附带的链接器期望对象文件分别为PECOFF和ELF格式。在上述命令的-f后面可能还有另一个东西可以让nasm
我尝试使用教程提供的likerscript链接文件。但是LD给了我一个错误,它不能读取nasm输出的文件。有人知道我做错了什么吗?如果您严格按照所示执行教程,那么问题很可能出现在这里:
nasm -f aout kernel_start.asm -o ks.o
这将生成完全过时的a.out格式的对象文件。您可能正在Windows或Linux主机系统上完成本教程;这些系统附带的链接器期望对象文件分别为PECOFF和ELF格式。在上述命令的-f
后面可能还有另一个东西可以让nasm
生成正确的格式
或者,学习编写AT&T汇编语言。然后,您可以使用gcc-c
将.asm
文件制作成一个对象文件,就像c源代码一样,您将自动获得正确的格式。AT&T相当于您在该教程中拥有的普通启动文件
.text
.globl start
start:
call k_main
cli
hlt
还要注意,我从
调用
指令的参数中删除了前导下划线。只有当C代码被编译成a.out-format对象文件时,下划线才合适,而(我们怀疑)它不是。我仍然很好奇,我可以在-f后面放些什么来将格式更改为gcc想要的格式。nasm手册中应该有一个列表。使用nasm-hf
来获得可用格式的列表elf32
或elf64
将是我的第一个猜测。我将其设置为elf,gcc仍然无法读取。然后尝试PECOFF。如果你能说出你使用的是什么操作系统,以及gcc-v打印的是什么,那就真的很有帮助了。