无法解决的`r_x86_64_none`重定位
Unresolvable `R_X86_64_NONE` relocation
我正在使用CentOS 7上的DevToolSet-7,并构建了Boost 1.65.1 W/IT。但是,当我链接我的应用程序时,我有以下内容:
/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
,为什么"没有重新分配"(根据Bintils的来源(符号的类型在精灵标题中存在?
附录:
- 在链接单元测试可执行文件上发生的错误发生了,该测试可执行,该测试与我的静态库链接并提升的静态库(单位测试框架(
- 所有静态库(Boost and Mine One(都使用
-fPIC
选项
构建
ps。我真的希望这个问题一劳永逸地解决(已经打了几次,但是这段时间更新到最新的binutils无济于事(。(将在此问题上对任何活动开始赏金(
从发布到红色帽子bugzilla错误的构建日志:
[19:15:01]W: [Step 8/12] + /usr/lib/rpm/check-buildroot
[19:15:01]W: [Step 8/12] + /usr/lib/rpm/brp-scl-compress /opt/rh/devtoolset-7/root
[19:15:01]W: [Step 8/12] + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
[19:16:40]W: [Step 8/12] /usr/bin/strip: /work/build/BUILDROOT/devtoolset-7-boost-1.65.1-4.el7.centos.x86_64/opt/rh/devtoolset-7/root/usr/lib64/libboost_container.a(global_resource.o): invalid relocation type 42
[19:16:40]W: [Step 8/12] /usr/bin/strip: BFD version 2.25.1-32.base.el7_4.2 assertion fail elf64-x86-64.c:341
注意/usr/bin/strip
,而不是/opt/rh/devtoolset-7/root/usr/bin/strip
。因此使用系统strip
命令。42对应于R_X86_64_REX_GOTPCRELX
重定位,该重定位是由DTS BinutilS生成的优化的。
使用此C 文件的简单方法是:
#include <iostream>
void
dot ()
{
std::cout << '.';
}
如果使用-O2 -fpic
编译,它将为_ZNSt8ios_base4InitD1Ev
产生X86_64_REX_GOTPCRELX
重定位。在其中运行/usr/bin/strip -g
将把其转变为R_X86_64_NONE
。可以使用eu-readelf -r
。
您可以使用rpm使用
来告诉使用DTSstrip
%if 0%{?scl:1}
%define __strip %{_bindir}/strip
%endif
在RPM规格文件中,您可以添加
%undefine __brp_strip_static_archive
完全跳过静态库(无论如何,这可能是正确的事情(。
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 重新定位图像时如何前进到下一个内存块
- 流填充字符的默认定位
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- NS3 - python.h 文件无法定位编译错误
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- redefine printf(), sprintf(), etc. arm-none-eabi toolchain
- Pybind11 默认参数 numpy 数组或 None
- arm-none-eabi-g++ 不能使用 -flto 正确处理弱别名
- GLEW 未在 MSYS2 上定位 OpenGL 函数
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- 如何忽略32位整数中的特定位
- 如何在C++中使用光标定位
- arm-none-eabi-g++:没有这样的文件或目录
- 使用 stdio.h 重新定位和重命名文件C++
- 使用 arm-none-eabi-gcc、newlib 和 cmake 连接 C/C++ STM32 项目
- R 包安装错误:重新定位 0 具有无效的符号索引 11
- 对于可重定位的多平台安装,理想的 cmake 安装目录结构是什么?
- 不能使用使用 lib*.a 的 CDT ---对符号 .. 的重新定位R_X86_64_32S