我正在CentOS 7上使用Devtoolset-7,已经用它构建了Boost 1.65.1。但是当我链接我的应用程序时,出现了以下错误:
/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: /opt/rh/devtoolset-7/root/usr/lib64/libboost_unit_test_framework.a(compiler_log_formatter.o)(.text._ZN5boost9unit_test5utils11string_castINS0_13basic_cstringIKcEEEESsRKT_[_ZN5boost9unit_test5utils11string_castINS0_13basic_cstringIKcEEEESsRKT_]+0x3c): unresolvable R_X86_64_NONE relocation against symbol `_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4'
/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
搜索有关 R_X86_64_NONE
的更多信息没有给出任何有价值的结果:大多数是没有回答或精确解释这是什么以及如何解决它的类似问题。
所以我的问题是:
- 这个错误实际上是什么意思?
R_X86_64_NONE
是什么,为什么 ELF 头中会存在“无需重定位”(根据 bintils 源)类型的符号?
补充说明:
- 错误发生在链接单元测试可执行文件时,该可执行文件链接到我的静态库和 Boost 的静态库(单元测试框架)
- 所有静态库(Boost 和我的静态库)都使用
-fPIC
选项构建
PS. 我真的希望这个问题能够一劳永逸地得到解决(已经遇到过几次了,但这次更新到最新的 binutils 也没有帮助)。 (将对此问题上的任何活动开始赏金)
g++ -v
所示)和一个包含所有输入文件的 tar 压缩包(至少包括那些不是分发/软件集合的一部分的文件)。 - Florian Weimer