139

如何在 Ubuntu 中获取 GLIBCXX_3.4.15?我无法运行我正在编译的某些程序。

当我做:

strings /usr/lib/libstdc++.so.6 | grep GLIBC

我得到:

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
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

谢谢你的帮助!

4

19 回答 19

81

我正在从源代码编译 gcc 4.6,显然

sudo make install 

没抓到这个。我挖了一圈发现

gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15

我将它复制到 /usr/lib 并重定向 libstdc++.so.6 以指向新的,现在一切正常。

于 2011-03-07T06:20:24.027 回答
60

过去我一直在通过简单地将 libstdc++ 与链接我的可执行文件时发送到 g++ 的参数静态链接来避免这个问题:

-static-libstdc++

如果在库中静态链接是一个选项,这可能是最快的解决方法。

于 2014-08-25T09:34:13.020 回答
48

我试图让 clang 工作(这也需要 6.0.15),在四处寻找时我发现它安装在/usr/local/lib/libstdc++.so.6.0.15. 当我安装石墨(实验性 gcc 版本)时,它安装在那里。

如果您需要访问该位置的库,则需要定义LD_LIBRARY_PATH为:

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64

完成此操作后,我能够铿锵地工作。希望这对某人有帮助。

于 2011-05-11T11:54:55.477 回答
14

我在尝试使用 matlab eng 从 c 代码调用 m 函数时遇到了这个问题。与命令一起发生mex -f .. ..

我的解决方案:

strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC

我发现它包括 3.4.15

所以我的系统有最新的库。

问题来自matlab本身,它调用了自己的libstdc++.so.6{MATLAB}/bin

所以,只需用更新的系统库替换它。

于 2013-05-08T16:37:21.230 回答
3

我刚刚在构建 LLVM 3.7 版本时遇到了类似的问题。首先检查您是否在系统上安装了所需的库:

$locate libstdc++.so.6.*

然后将找到的位置添加到您的 $LD_LIBRARY_PATH 环境变量中。

于 2015-12-24T20:04:10.633 回答
2

我得到了同样的错误。这就是它对我的工作方式:

  • 清理了当前安装的 gcc 下的项目
  • 重新编译它

工作完美!

于 2012-06-26T13:21:40.207 回答
2

对于这个错误,我从其他服务器复制了最新的 libstdc++.so.6.0.17,并删除了软链接并重新创建了它。

1. 将 libstdc++.so.6.0.15 或最新版本从其他服务器复制到受影响的系统。
就我而言,SUSE linux 11 SP3 是最新的。
2. rm libstdc++.so.6
3. ln -s libstdc++.so.6.0.17 libstdc++.so.6(在/usr/lib64目录下)。

nJoy

于 2014-08-06T07:20:43.833 回答
2

有时您无法控制目标机器(例如,您的库需要在锁定的企业系统上运行)。在这种情况下,您需要使用与其 GLIBCXX 版本对应的 GCC 版本重新编译您的代码。在这种情况下,您可以执行以下操作:

  1. 查找目标机器支持的最新版本的 GLIBCXX:strings /usr/lib/libstdc++.so.6 | grep GLIBC... 假设版本是3.4.19.
  2. 使用https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html找到对应的 GCC 版本。在我们的例子中,这是[4.8.3, 4.9.0).
于 2017-03-09T20:58:33.020 回答
1

gcc 版本 4.8.1,错误看起来像:

/root/bllvm/build/Release+Asserts/bin/llvm-tblgen: /usr/lib64/libstdc++.so.6: 找不到版本“GLIBCXX_3.4.15”(/root/bllvm/build/Release+Asserts/ 需要bin/llvm-tblgen)

我在编译 gcc 4.8.1 的地方找到了 libstdc++.so.6.0.18

然后我喜欢这个

cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/

rm /usr/lib64/libstdc++.so.6

ln -s libstdc++.so.6.0.18 libstdc++.so.6

问题解决了。

于 2015-07-22T15:17:54.973 回答
1

我从 RPM 中提取了它们(RPM for libstdc++),然后:

export LD_LIBRARY_PATH=.

设置系统搜索当前目录中的库。然后就执行了我的程序。但就我而言,我收到了我需要的单个可执行文件,这不是系统范围的更改。

于 2016-10-13T10:25:32.837 回答
0

我有一个类似的问题,我已经通过静态链接libstdc++到我正在编译的程序来解决它,如下所示:

$ LIBS=-lstdc++ ./configure ... etc.

而不是通常的

$ ./configure ... etc.

此解决方案可能存在与在运行时加载共享库有关的问题,但我尚未深入研究该问题以发表评论。

于 2013-06-11T18:02:37.563 回答
0

与 gcc 版本4.8.1 (GCC)libstdc++.so.6.0.18. 不得不把它复制/usr/lib/x86_64-linux-gnu到我的ubuntu盒子上。

于 2013-06-26T07:22:05.487 回答
0

GLIBCXX_3.4.14的错误 您需要安装更新版本的 GCC。 http://pkgs.org/download/libstdc++.so.6 转到:

http://geeksterminal.com/how-to-install-glib-glibc/1392/

并按照说明进行操作。

于 2014-08-16T15:26:55.457 回答
0

我遇到了同样的问题,因为我将用户从自己更改为其他人:

由于某种原因,在正常编译后我无法执行它(相同的错误消息)。直接 ssh 到其他用户帐户的作品。

于 2015-04-01T11:49:55.293 回答
0

我安装了多个版本的 gcc 编译器,需要使用比默认安装更新的版本。由于我不是我们 Linux 系统的系统管理员,我不能只更改 /usr/lib 或上面的许多其他建议。我遇到了这个问题并最终将其追踪到将我的路径设置为 32 位库目录而不是 64 位库 (lib64) 目录。由于 32 位目录中的库不兼容,系统默认使用旧版本,该版本已过时。

对我引用的路径使用 -L 会给出有关“在搜索 -lstdc++ 时跳过不兼容的 libstdc++.so”的警告。这是帮助我最终解决问题的提示。

于 2015-06-22T22:22:41.073 回答
0

在我的例子中,LD_LIBRARY_PATH 在 /usr/local/lib64 之前首先有 /usr/lib64。(我正在构建 llvm 3.9)。
我为编译 llvm 3.9 而安装的新 gcc 编译器在 /usr/local/lib64 下使用了较新的 GLIBCXX 库,因此我修复了 LD_LIBRARY_PATH 以便链接器首先查看 /usr/local/lib64。
这解决了这个问题。

于 2018-05-08T09:00:07.033 回答
0

我只是在构建时使用了 -static-libstdc++。有了这个,我可以运行 a.out

g++ test.cpp -static-libstdc++
于 2018-11-28T19:31:44.707 回答
0

出于测试目的:

在原机上,找到库,复制到与可执行文件相同的目录:

$ ldconfig -p | grep libstdc
        libstdc++.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
        libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 .

然后将同一个库复制到目标机器,并运行可执行文件:

LD_LIBRARY_PATH=. ./myexecutable

注意:上面的命令是临时的;这不是系统范围的更改。

于 2020-04-01T12:47:06.023 回答
-1

我之前遇到过同样的问题,并修复了,可以 在 matlab 上的这个 Fixing error "GLIBCXX_3.4.15" 上找到这些步骤

于 2013-10-09T16:59:00.033 回答