Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用LD链接文件_C_Nasm_Ld - Fatal编程技术网

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打印的是什么,那就真的很有帮助了。