/usr/lib/libstdc + + . so.6: 版本‘ GLIBCXX_3.4.15’未找到

我怎样才能在 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

谢谢你的帮助!

320771 次浏览

我正在从源代码编译 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重定向到新的,现在一切正常。

我试图让叮当声工作(这也需要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

这样做之后,我可以得到叮当的工作。希望这对某些人有帮助。

我也犯了同样的错误,我就是这么做的:

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

非常有效!

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

我的解决办法是:

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

我发现它包括3.4。15

所以我的系统里有最新的填词游戏。

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

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

我也遇到过类似的问题,我通过静态链接 libstdc++到我正在编译的程序中来解决它,就像这样:

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

而不是平常

$ ./configure ... etc.

这个解决方案在运行时加载共享库时可能会出现问题,但我还没有深入研究这个问题以便进行评论。

Gcc 版本 4.8.1 (GCC)libstdc++.so.6.0.18也是一样,只能在我的 ubuntu 机器上拷贝 /usr/lib/x86_64-linux-gnu

我以前也遇到过同样的问题,并且解决了这个问题,在这里可以找到相应的步骤 在 matlab 上修正错误“ GLIBCXX _ 3.4.15”

对于这个错误,我从其他服务器复制了最新的 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目录下) . < br >

好极了

具有 GLIBCXX _ 3.4.14的 Bug 您需要安装一个新版本的 GCC。 Http://pkgs.org/download/libstdc++.so.6 前辈:

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

听从指示。

我过去一直在避免这个问题,只是在链接可执行文件时,将 libstdc + + 静态地链接到发送给 g + + 的参数:

-static-libstdc++

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

我也有同样的问题,因为我把用户从我自己改成了别人:

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

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

在我引用的路径中使用-L 会给出“跳过不兼容的 libstdc + +”的警告。所以在搜索-lstdc + + 时。这个暗示帮助我最终解决了这个问题。

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

问题解决了。

我在构建 LLVM 3.7版本时也遇到过类似的问题。 首先检查你的系统是否已安装所需的程式库:

$locate libstdc++.so.6.*

然后将找到的位置添加到 $LD _ librARY _ PATH 环境变量。

我把它们从转速(Libstdc + + 的 RPM)中提取出来,然后:

export LD_LIBRARY_PATH=.

设定系统搜寻工作目录上的图书馆。然后就执行了我的程序。但是在我的例子中,我只收到了一个我需要的可执行文件,它不是系统范围的更改。

有时候你不能控制目标机器(例如你的库需要在一个封闭的企业系统上运行)。在这种情况下,您将需要使用与 GCC 的 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 版本。

在我的例子中,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。
解决了这个问题。

我只是在构建时使用了-static-libstdc + + 。 那样的话,我就可以把它运出去了

g++ test.cpp -static-libstdc++

测试用途:

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

$ 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

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