libstdc++.so.6的重新定位错误
Relocation error with libstdc++.so.6
我的任务是用gcc将一组封闭源代码库从Windows/MSVC2013移植到Ubuntu Linux 12.04/64。我已经编译并安装了gcc5.2("官方"C++11支持所需),它还用libstdc++.so.6.0.21替换了libstdc++库。
我的库使用了很棒的log4cplus日志框架。这是我想移植的第一部分,我已经成功地移植了:
- 构建log4cplus共享库
- 将log4cplus共享库部署到/usr/local/lib并运行sudo ldconfig
- 构建依赖于log4cplus的静态库(这基本上为log4cplus添加了一些语法糖)
- 构建测试应用程序并将其链接到静态库
当我为g++使用-static libstdc++编译器选项来编译log4cplus时,我的测试应用程序启动并运行良好。然而,这并不是最终解决方案(闭源)。当我省略log4cplus makefile中的选项时,运行我的应用程序时会出现以下错误:
BasicsTests: relocation error: /usr/local/lib/liblog4cplusU.so.0: symbol _ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
我已经使用readelf工具来找出这个符号是否真的丢失/版本错误,但显然不是这样:
$ readelf -s --wide /usr/local/lib64/libstdc++.so.6 | grep _ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev
4858: 000000000010cd10 108 FUNC WEAK DEFAULT 11 _ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21
6042: 000000000010cd10 108 FUNC WEAK DEFAULT 11 _ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev
我的测试应用程序是一个64位的可执行文件,所以我希望它能链接到那个库:
$ file BasicsTests
BasicsTests: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, not stripped
我不确定重新定位的目标是哪个特定的so库(我在系统上有其他libstdc++版本,但没有一个版本早于6.0.19,而且它们位于我怀疑是特定于应用程序的目录中)。
echo $LD_LIBRARY_PATH
只是没有给我任何东西,所以除了标准之外,没有其他路径应该应用
除了我无法解释的错误之外,让我困惑的是,在/usr/lib或/usr/local/lib中没有(指向)libstdc++.so的链接,但是,似乎找到了库(当找不到库时,我会看到不同的错误)。
如果我问了愚蠢的问题/犯了愚蠢的错误,我很抱歉,但我是Linux下开发的新手,这次调查是我在过去几天里令人沮丧地进入该领域的结果。
任何帮助都将不胜感激!
编辑-Oleksandr Kravchuk 提问
/etc/ld.so.conf.d/libc.conf内容:
# libc default configuration
/usr/local/lib
问题似乎是您将二进制文件与一个libstdc++链接,而Linux的动态链接器使用另一个。这就是为什么静态链接可以使程序正常工作。
您可以通过在/etc/ld.so.conf.d/libc.conf中注释掉不必要的库副本并运行ldconfig afterwords来修复它。
- NS3 - python.h 文件无法定位编译错误
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- R 包安装错误:重新定位 0 具有无效的符号索引 11
- Visual Studio 2019 不会打开包含源文件的窗口,也不会定位为出现错误的行
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- llvm错误:重新定位尚未实现!在orcjit或lli中运行RxCpp时
- 从函数返回错误定位的指针,是否会导致内存泄漏
- TC++PL书中练习中向量ctor的定位错误
- 将 std::vector 的缓冲区替换为错误定位的字符数组
- 打印以定位错误代码块
- 无法编译和定位错误
- C++ Qt MingW 错误的重新定位0xc rdata 部分中的地址
- 错误的重新定位地址0x0在 python.data C 扩展中
- 链接器错误:未定义的引用/错误的重新定位地址/ld返回1个出口
- 如何定位WinRT异步方法调用中出现错误的位置
- libstdc++.so.6的重新定位错误
- 无法定位错误cpp linux
- 使用extern时gcc的重定位错误
- 对话框定位错误