Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在未链接的节上生成警告_C++_C_Linker_Linker Scripts - Fatal编程技术网

C++ 在未链接的节上生成警告

C++ 在未链接的节上生成警告,c++,c,linker,linker-scripts,C++,C,Linker,Linker Scripts,我正在编写自己的链接器脚本和启动代码(针对嵌入式处理器),并且正在使用gnu链接器 起初,我开始只支持C代码,我的启动代码运行良好……然后我尝试链接C++程序。它连接起来,一切都很好,但它不起作用 经过一些调试后,我发现链接器脚本没有将.sbss部分放在任何地方(我确实将.bss部分放在了某个地方,但没有将.sbss放在那里)。所以我的问题是: 是否可以在节未链接到程序时生成警告?。。。。谷歌搜索什么也找不到,我浏览了链接器的手册,但没有结果 是否可以在节未链接到程序时生成警告 我认为这在链接器

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

起初,我开始只支持
C
代码,我的启动代码运行良好……然后我尝试链接
C++
程序。它连接起来,一切都很好,但它不起作用

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

是否可以在节未链接到程序时生成警告?。。。。谷歌搜索什么也找不到,我浏览了链接器的手册,但没有结果

是否可以在节未链接到程序时生成警告

我认为这在链接器中是不可能的,但您可以在链接后步骤中实现它:

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
没有链接到程序中。

是的,但我希望这对任意部分起作用(此时我可能不知道)