在未链接的部分生成警告

时间:2018-10-20 17:07:28

标签: c++ c linker linker-scripts

我正在编写自己的链接器脚本和启动代码(用于嵌入式处理器),并且正在使用gnu链接器。

起初,我开始仅支持C代码,并且启动代码可以正常工作.....然后,我尝试链接C++程序。它链接了,一切都很好,但是没有用。

经过一些调试后,我发现链接程序脚本没有将.sbss部分放在任何地方(我确实将.bss部分放在了某处,但没有将.sbss放在某处)。所以这是我的问题:

只要某节未链接到程序,是否有可能生成警告?.... Google搜索什么都没有找到,我浏览了链接器的手册,但无济于事

1 个答案:

答案 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.olibfoo.a
  • 的一部分

现在,当您与gcc main.o -lfoo链接时,foo.o不会不会进入链接(因为没有引用),现在您的警告将告诉您您没有将.x.y.z链接到程序中。