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

时间:2011-03-07 06:04:56

标签: c++ gcc libstdc++

如何在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

感谢您的帮助!

19 个答案:

答案 0 :(得分:77)

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

答案 1 :(得分:46)

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

-static-libstdc++

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

答案 2 :(得分:43)

我试图让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

这样做后,我能够开始工作。希望对某人有所帮助。

答案 3 :(得分:12)

尝试使用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

所以,只需将其替换为更新的系统库。

答案 4 :(得分: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

答案 5 :(得分:2)

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

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

工作得很完美!

答案 6 :(得分:2)

gcc版本4.8.1,错误似乎是:

  

/根/ bllvm /建造/推出+断言/ bin中/ LLVM-tblgen:   /usr/lib64/libstdc++.so.6:版本`GLIBCXX_3.4.15&#39;未找到   (需要/ 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

问题解决了。

答案 7 :(得分:2)

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

awk

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

答案 8 :(得分:1)

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

export LD_LIBRARY_PATH=.

设置系统以在当前目录中搜索库。然后刚刚执行了我的程序。但在我的情况下,我收到了一个我需要的可执行文件,这不是系统范围的改变。

答案 9 :(得分:1)

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

  1. 查找目标计算机支持的最新版GLIBCXX:a = [1, 2, 3] b = list() for l in range(len(a)+1): b.append([c for c in combinations(a, l)]) print(b) ...说版本为strings /usr/lib/libstdc++.so.6 | grep GLIBC
  2. 使用https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html查找相应的GCC版本。在我们的例子中,这是3.4.19

答案 10 :(得分:0)

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

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

而不是通常的

$ ./configure ... etc.

此解决方案可能在运行时加载共享库时遇到问题,但我没有深入研究该问题以进行评论。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

之前我遇到过同样的问题,并修复了这个步骤 Fixing error "GLIBCXX_3.4.15" on matlab

答案 13 :(得分:0)

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

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

并按照说明操作。

答案 14 :(得分:0)

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

su

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

答案 15 :(得分:0)

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

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

答案 16 :(得分: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。
这解决了这个问题。

答案 17 :(得分:0)

我在构建时只使用了-static-libstdc ++。 瓦特那,我可以运行a.out

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

答案 18 :(得分: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

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