首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请解释此链接错误:在.rodata部分中引用

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

Stack Overflow用户
提问于 2011-03-17 09:32:02
回答 2查看 6.6K关注 0票数 5

我正在一台32位的SLES10机器上做一个构建。使用GCC 3.4.2

下面是一个错误示例

代码语言:javascript
复制
`.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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-17 09:47:03

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

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

编辑:

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

票数 6
EN

Stack Overflow用户

发布于 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,我能够再次让事情链接起来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5333871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档