我有 2 个用 GNU as 组装的 obj 文件,它们是:
- a.o : 我的专业
- b.o : 一些效用函数
a.o 没有入口点。最终链接的文件将被加载到内存中,执行将跳转到其最开始的加载地址,这是 a.o 的第一条指令。
现在我想用 GNU ld 将它们链接在一起。我想让 a.o 在最终文件中出现在 b.o 之前。我怎么能控制这个?我是否必须制作一个自定义部分并像这样在链接描述文件中编写:
SECTIONS
{
. = 0x7c00;
.text : { *(.text) }
.my_custom_section : { *(.my_custom_section) }
.data : { *(.data) }
.bss : { *(.bss) }
}
OUTPUT_FORMAT(binary)
更新
这个问题有问题吗?我发错了吗?如果是这样,请告诉我,伙计们。非常感谢。
目前,我发现输入文件的命令行顺序似乎是相关的。
如果我这样做:
ld a.o b.o -o final.bin
来自 a.o 的内容将出现在 b.o 之前。
如果我这样做:
ld b.o a.o -o final.bin
否则会是这样。
这样意味着被控制吗?
最佳答案
根据manual :
options which refer to files ... cause the file to be read at the point at which the option appears in the command line, relative to the object files and other file options
所以二进制文件中的文件顺序就是它们在命令行中出现的顺序。
因此,正如您在更新中提到的那样,意味着要受到控制。
关于linux - 关于 GNU 链接器编辑器 "ld"的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626697/