欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c++ linker warning: defined in discarded section

程序员文章站 2022-03-08 23:05:28
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(即被丢弃的那个),就会报这个错。(不同的编译参数可能导致这个问题)

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