c/c++语言开发共享c++ linker warning: defined in discarded section

c++ linker warning: defined in discarded section。 /usr/bin/ld: .gnu.linkonce.t._zn5boost8signals25s

c++ linker warning: defined in discarded section。

/usr/bin/ld: .gnu.linkonce.t._zn5boost8signals25slot0ivns_8functionifvveeeed1ev' referenced in section.gnu.linkonce.r._zn5boost8signals25slot0ivns_8functionifvveeeed1ev’ of ./libut_doraemon.a(ut_doraemon_city_id_data_handler.o): defined in discarded section `.gnu.linkonce.t._zn5boost8signals25slot0ivns_8functionifvveeeed1ev’ of ./libut_doraemon.a(ut_doraemon_city_id_data_handler.o)

以上是我遇到的编译warning

经网上搜索发现这是gcc编译器引入后comdat section(或者叫linkonce section)才会出现的。

comdat section简单地说就是编译器将可能存在多处定义的symbol作了一个特殊处理,放到了一个特殊的section,这样多个object文件的comdat section可能保存了同一个symbol的信息,在linker选择symbol进行读取的时候只会选择其中一个section,而丢弃其他secition。

如果由于链接顺序不对,导致引用了不对的section(即被丢弃的那个),就会报这个错。(不同的编译参数可能导致这个问题)

为解决这个问题,需要同一编译参数,并检查链接顺序(按照链接参数从左向右链接)。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607992.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐