我正在编写自己的链接器脚本和启动代码(用于嵌入式处理器),并且正在使用gnu链接器。
起初,我开始仅支持C
代码,并且启动代码可以正常工作.....然后,我尝试链接C++
程序。它链接了,一切都很好,但是没有用。
经过一些调试后,我发现链接程序脚本没有将.sbss
部分放在任何地方(我确实将.bss
部分放在了某处,但没有将.sbss
放在某处)。所以这是我的问题:
只要某节未链接到程序,是否有可能生成警告?.... Google搜索什么都没有找到,我浏览了链接器的手册,但无济于事
答案 0 :(得分:0)
只要某节未链接到程序,是否可以生成警告?
我认为链接器中不可能实现,但是您可以在链接后步骤中轻松实现它:
readelf -WS a.out | grep -q ' \.sbss' || { echo "Did not find .sbss!" >&2; false; }
我希望它适用于任意部分(目前我可能还不知道)
这种警告将毫无用处,因为它会一直触发 。
考虑:
main.o
定义了main
,没有引用其他任何内容。foo.o
定义foo
并具有.x
,.y
和.z
部分。 foo.o
是libfoo.a
现在,当您与gcc main.o -lfoo
链接时,foo.o
不会不会进入链接(因为没有引用),现在您的警告将告诉您您没有将.x
,.y
和.z
链接到程序中。