我正在一台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发布于 2011-03-17 09:47:03
这通常是因为两个不同的.cpp是用不同的编译器开关编译的-但也使用相同的模板。生成的模板实例化可能在定义/引用内容上有所不同,如果选择的实例化没有定义/引用与被丢弃的符号完全相同的符号,则可能会出现此错误。
验证是否所有.cpp都是使用完全相同的编译器开关和定义进行编译的。如果这是不可能的,请在链接器命令行上重新排序.obj文件,特别是尝试将错误消息中提到的.obj文件移到.obj文件列表的末尾或开头。
编辑:
此外,如果您要链接到预先构建的c++库,请查看是否可以复制用于构建这些库的编译器开关。
发布于 2011-08-15 22:17:02
这可能是因为使用了较新版本的binutils。binutils版本2.15将此视为非致命错误,但后来的binutils版本发生了变化,因此链接开始失败。类似的报告请参见https://bugzilla.redhat.com/show_bug.cgi?id=191618。
在我的例子中,通过显式地使用binutils 2.16.1而不是binutils 2.17,我能够再次让事情链接起来。
https://stackoverflow.com/questions/5333871
复制相似问题