我正在建造一个图书馆,大致可以归结为:
// foo.c extern void func(); int main() { // ... }
我用gcc -o foo func.o foo.c编译。这会产生一个二进制代码,其中符号func在main之前(即具有较低的地址)。但是,如果我添加优化,例如-O3,链接器会决定将func放在main之后。有办法执行这个命令吗?
gcc -o foo func.o foo.c
func
main
-O3
2fjabf4q1#
有些链接器似乎是用一个键值表来存储它们的符号,而散列的符号作为键,当涉及到分配时,它们可能会使用散列表中的序列,而这可能不是遇到符号的序列。我从来没有找到一种方法来控制这种行为。它发生在我身上与全局变量。如果您使用特定的链接器脚本并将段/节分配给函数,则可能会获得一些控制。
1条答案
按热度按时间2fjabf4q1#
有些链接器似乎是用一个键值表来存储它们的符号,而散列的符号作为键,当涉及到分配时,它们可能会使用散列表中的序列,而这可能不是遇到符号的序列。
我从来没有找到一种方法来控制这种行为。它发生在我身上与全局变量。
如果您使用特定的链接器脚本并将段/节分配给函数,则可能会获得一些控制。