请解释此链接错误:在.rodata部分中引用

she*_*ill 5 c++ linux linker g++ suse

我正在使用32位SLES10机器进行构建.使用GCC 3.4.2

这是一个示例错误

`.L8245' referenced in section `.rodata' of CMakeFiles/myproj.dir/c++/util/MyObj.o: defined in discarded section
 `.gnu.linkonce.t._ZN5boost9re_detail9reg_grep2INS0_21grep_search_predicateIPKcSaIcEEES4_cNS_12regex_traitsIcEES5_S5_EEjT_T0_SA_RKNS_14reg_expressionIT1_T2_T3_EEjT4_' of CMakeFiles/myproj.dir/c++/util/MyObj.o
Run Code Online (Sandbox Code Playgroud)

Eri*_*rik 6

这通常是由于使用不同的编译器开关编译了2个不同的.cpp - 但也使用相同的模板.生成的模板实例化可能在它们定义/引用的内容上有所不同,如果所选的实例化没有定义/引用与丢弃的实例完全相同的符号,则可能会出现此错误.

验证所有.cpp是使用完全相同的编译器开关和定义编译的.如果无法做到这一点,请重新排序链接器命令行上的.obj文件,特别是尝试将错误消息中提到的.obj文件移动到.obj文件列表的结尾或开头.

编辑:

此外,如果要链接预构建的c ++库,请查看是否可以复制用于构建这些库的编译器开关.