请解释这个链接错误:在.rodata节中引用

我正在做一个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 

Solutions Collecting From Web of "请解释这个链接错误:在.rodata节中引用"

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

验证所有的.cpp都是用完全相同的编译器开关编译并定义的。 如果不可行,请在链接器命令行上重新排序.obj文件,特别是尝试将错误消息中提到的.obj文件移动到.obj文件列表的末尾或开头。

编辑:

另外,如果你链接到预编译的c ++库,看看你是否可以复制用于构建这些库的编译器开关。

这可能是由于使用了更新版本的binutils。 binutils版本2.15将此视为非致命错误,但更高版本的binutils已更改,因此链接开始失败。 有关类似的报告,请参阅https://bugzilla.redhat.com/show_bug.cgi?id=191618

就我而言,我能够通过明确使用binutils 2.16.1而不是binutils 2.17来重新链接。