c++ linker warning: defined in discarded section
来源:互联网 发布:java multipart 编辑:程序博客网 时间:2024/06/05 10:03
/usr/bin/ld:
.gnu.linkonce.t._ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKN5boost7variantINS2_8weak_ptrIvEENS2_8s
.gnu.linkonce.r._ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIP
ignals26detail21foreign_void_weak_ptrENS2_6detail7variant5void_ESB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_EESt6vectorI
SC_SaISC_EEEEPSC_ET0_T_SL_SK_' referenced in section
KN5boost7variantINS2_8weak_ptrIvEENS2_8signals26detail21foreign_void_weak_ptrENS2_6detail7variant5void_ESB_SB_SB_SB_SB_SB_SB_SB
SB_SB_SB_SB_SB_SB_SB_SB_SB_EESt6vectorISC_SaISC_EEEEPSC_ET0_T_SL_SK’ of ../fancirclese/libfancirclese.a(fancirclese_dump_thre
ad.o): defined in discarded section `.gnu.linkonce.t._ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKN5boost7variantI
NS2_8weak_ptrIvEENS2_8signals26detail21foreign_void_weak_ptrENS2_6detail7variant5void_ESB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_S
B_SB_SB_SB_EESt6vectorISC_SaISC_EEEEPSC_ET0_T_SL_SK_’ of ../fancirclese/libfancirclese.a(fancirclese_dump_thread.o)
以上是我遇到的编译warning
经网上搜索发现这是gcc编译器引入后COMDAT section(或者叫linkonce section)才会出现的。
COMDAT section简单地说就是编译器将可能存在多处定义的symbol(c++模板、inline函数等)作了一个特殊处理,放到了一个特殊的section,这样多个object文件的COMDAT section可能保存了同一个symbol的信息,在linker选择symbol进行读取的时候只会选择其中一个section,而丢弃其他secition。
如果由于链接顺序不对,导致引用了不对的section(即被丢弃的那个),就会报这个错。(不同的编译参数,如-g -pipe -W -Wall -fPIC -O2,可能导致这个问题)
为解决这个问题,需要统一编译参数,并检查链接顺序(按照链接参数从左向右链接)。
以上的warning经排查就是因为链接的某一个库的编译参数与其他模块不同,少了-O2
还有一种warning:
/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是因为一个模板类的T类型在定义的时候,显示定义了析构函数,导致引用了不同的基类。
- c++ linker warning: defined in discarded section
- C++Builder 6 [BCB6] 共享数据段 错误 测试 (bug 、[Linker Error] Section SHSEG defined in .def file is empty)
- IAR报Warning[25]: Label 'HardFault_Handler' is defined pubweak in a section implicitly declared root
- Warning[25]: Label 'Reset_Handler' is defined pubweak in a section implicitly declared root
- Warning[25]: Label 'xxxxx' is defined pubweak in a section implicitly declared root
- IAR Warning[25]: Label 'Reset_Handler' is defined pubweak in a section implicitly declared root
- Linker Error: _funcName defined in module XXX.c is duplicated in module XXX.c
- Linker Error: _funcName defined in module XXX.c is duplicated in module XXX.c
- User-Defined Types in C
- Linker Tools Warning LNK4098
- Linker Tools Warning LNK4098
- symbols are defined in a linker script file(etext, edata, end)
- LNK2005 int * c? already defined in *.obj
- Android NDK: WARNING:jni/Android.mk:native_sample: non-system libraries in linker flags: -lopencv_ja
- Android NDK: WARNING:jni/Android.mk: non-system libraries in linker flags: -lopencv_java3
- Error: No room left in memory section, Image is too large for defined regions
- IAR 问题:Label 'Reset_Handler' is defined pubweak in a section implicitly declared root
- Linker Tools Warning LNK4098 解决办法
- 浅谈JAVA序列化与反序列化
- 学生图书管理系统大作业
- 汇编运行地址,链接地址,加载地址,存储地址 位置无关码、位置有关码
- Vue2.0(购物车和地址选配)
- Spring 注解总结
- c++ linker warning: defined in discarded section
- rslsync 200Kbps uses 1.7% cpu and 12.4% mem
- 聊一聊equals和==的区别
- 算法训练 猴子分苹果
- 【数据结构_顺序表_List_1103】我记得是叫删除来着......
- 未来我将成为你们的移动网站“先锋部队”
- POJ:1716 Integer Intervals(贪心)
- 资治通鉴摘引一
- JVM调优