如何确保GNU链接器ld是页面对齐部分而没有链接描述文件?

时间:2017-05-31 00:05:36

标签: ld

正如标题所暗示的那样,我正在尝试编译并随后链接二进制文件,我希望将部分(文本,数据,bss等)分页对齐。为此,我尝试将--no-omagic选项传递给ld。我正在使用的文字命令(在我的Makefile中)是:

ld --no-omagic -o build/initlink.out $^

ld --help表示该选项应具有以下效果:

--no-omagic        Page align data, make text readonly

但如果我在输出上执行nm -n,则每个部分中的第一个符号对齐。例如:

$ nm -n build/initlink.out | grep ' [tT] ' | head -n 1
00000000004000f0 T main

$ nm -n build/initlink.out | grep ' [dD] ' | head -n 1
00000000006d74b0 d vsscanf.basefix

$ nm -n build/initlink.out | grep ' [bB] ' | head -n 1
00000000006e7200 B __bss_start

如果这很重要,我尝试链接的一件事就是静态库(.a扩展名)。

有什么我可能做错了吗?是否有另一种方法可以确保部分的页面对齐,没有使用链接描述文件?我尝试过使用--section-alignment选项,但是当我这样做时,我被告知它是无法识别的。静态库定义了一些奇怪的符号(涉及“链接器集”,我发现这些符号很糟糕)我遇到了问题,因此我想尝试这样做,而不必做任何事情,只是告诉链接器将部分放在某些地方。

0 个答案:

没有答案