c++ - libstdc++.so.6 : version GLIBCXX_3. 4.20 未找到

标签 c++ gcc version std glibc

首先,我对 C++ 和 Ubuntu 非常陌生。

我有一个程序,我尝试使用 GCC(我的版本是 gcc 4.8.4)通过 makefile 进行编译。 问题是可执行文件是在它可以工作的目录下创建的,但是当它复制到任何其他目录(甚至强制在 makefile 上创建)时,它会说。

/usr/lib/i386-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found 

此外,当我检查带有字符串的版本时/usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX,我得到:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

据我在互联网上读到的问题是,当我使用 4.8.4 时,GLIBCXX_3.4.20 仅受 gcc 4.9 及更高版本支持,但我仍然不明白为什么它可以在特定目录而不是其他目录。

gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4) 

由于我没有更新 gcc 的权限,我想知道我能做些什么来解决这个问题... 我应该避免在需要 GLIBCXX_3.4.20 的代码上使用哪些内容? 我可以强制编译器以某种方式使用该库的旧版本或在二进制文件中包含该特定库吗? (如果我没有所需的库,我无法理解为什么它可以在目录中工作)

提前致谢,如果我的问题很愚蠢或没有意义,我很抱歉,正如我所说,我对这一切都很陌生。

最佳答案

I have been trying commenting and uncommenting all parts of the code and I've got to the answer that the function string.find() is the one giving me that trouble.

激烈的事件并不能代替理解。

从您描述的症状来看,很明显您有两个不同版本的 libstdc++.so.6 ,并且您的程序在特定目录中运行时绑定(bind)到一个版本,在该目录之外运行时绑定(bind)到另一个版本。

您的首要任务是找出 libstdc++.so.6 的版本正在使用时。您可以通过以下方式做到这一点:

cd /path/to/specific/directory
LD_DEBUG=files,libs /path/to/binary ...args...

并将输出与

进行比较
cd /tmp
LD_DEBUG=files,libs /path/to/binary ...args...

一旦你知道了工作的路径 libstdc++.so.6 ,您需要弄清楚为什么您只是在某些时候而不是一直使用它。

常见原因包括 LD_LIBRARY_PATH 中有相对路径环境变量(坏),或者在 RPATHRUNPATH二进制文件本身或其依赖的库之一。

您可以检查RPATH这样:

readelf -d /path/to/binary | egrep 'RPATH|RUNPATH'

您的最后一步应该是摆脱相对路径(无论它们来自何处 - 它们永远都不是一个好主意),并安排 libstdc++.so.6 的正确版本。 总是被拾取(通常通过在链接时提供 -Wl,-rpath=/path/to/desired/directory )。

完成此操作后,无论从哪个目录调用您的程序都应该正常工作。

关于c++ - libstdc++.so.6 : version GLIBCXX_3. 4.20 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53592796/

相关文章:

c - 编写一个程序,读取一个整数。输出另一个整数,其中偶数位保留,奇数位减 1,

c++ - boost 1.68。安装

c++ - 在没有 root 的情况下安装 GCC-4.9 - 添加路径和二进制文件等等

c# - 在 C# 代码中增加版本号

c++ - 同一 (Boost) DLL 的多个版本可以在同一进程中共存吗?

c++ - Linux 上的共享库和链接 (elf)

C++:在构造函数中初始化变量的位置

c++ - 他贪心吗?

python - 指定 Windows 使用 Anaconda Python 解释器

c++ - 在 C++ 中初始化类变量 float 数组