将文件与LD链接

时间:2013-08-14 00:56:27

标签: c nasm ld

我读了这个教程:http://www.osdever.net/tutorials/view/writing-a-simple-c-kernel 我尝试使用教程提供的likerscript链接文件。但LD给我一个错误,说它无法读取nasm发出的文件。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果您按照所示精确地执行了教程,那么问题很可能在这里:

nasm -f aout kernel_start.asm -o ks.o

这将以完全过时的 a.out 格式生成目标文件。您可能正在使用Windows或Linux主机系统上的教程;这些系统附带的链接器分别需要PECOFF和ELF格式的目标文件。在上面的命令中-f之后可能还有另外一件事可以使nasm生成正确的格式。

或者,学习编写AT& T汇编语言。然后,就像C源代码一样,您可以使用.asmgcc -c文件中创建一个目标文件,然后您将自动获得正确的格式。您在该教程中的简单启动文件的AT& T等价物将是

    .text
    .globl start
start:
    call k_main
    cli
    hlt

请注意我从call指令的参数中删除了前导下划线。只有将C代码编译为 a.out -format对象文件时,该下划线才适用,(我们怀疑)它不是。