如何在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
感谢您的帮助!
答案 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
所以,只需将其替换为更新的系统库。
答案 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)
我得到了同样的错误。这就是它对我有用的方式:
工作得很完美!
答案 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版本重新编译代码。 在这种情况下,您可以执行以下操作:
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
。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
注意:上面的命令是临时的;这不是系统范围的更改。