正如标题所暗示的那样,我正在尝试编译并随后链接二进制文件,我希望将部分(文本,数据,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
选项,但是当我这样做时,我被告知它是无法识别的。静态库定义了一些奇怪的符号(涉及“链接器集”,我发现这些符号很糟糕)我遇到了问题,因此我想尝试这样做,而不必做任何事情,只是告诉链接器将部分放在某些地方。