gcc 链接器:在结果二进制文件中强制符号排序

ngynwnxp  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(142)

我正在建造一个图书馆,大致可以归结为:

// foo.c
extern void func();

int main() {
 // ...
}

我用gcc -o foo func.o foo.c编译。这会产生一个二进制代码,其中符号funcmain之前(即具有较低的地址)。但是,如果我添加优化,例如-O3,链接器会决定将func放在main之后。
有办法执行这个命令吗?

2fjabf4q

2fjabf4q1#

有些链接器似乎是用一个键值表来存储它们的符号,而散列的符号作为键,当涉及到分配时,它们可能会使用散列表中的序列,而这可能不是遇到符号的序列。
我从来没有找到一种方法来控制这种行为。它发生在我身上与全局变量。
如果您使用特定的链接器脚本并将段/节分配给函数,则可能会获得一些控制。

相关问题