执行二进制文件时出现错误:找不到 'GLIBCXX_3.4.11'。

10
我试图运行一些预编译的代码,但是我遇到了以下错误:
./bin/stipdet: /cm/shared/apps/gcc/4.3.4/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./bin/stipdet)

我在Google上搜索了这个错误,并发现有些人通过删除libstdc++.so.6并添加一个新的动态链接指向usr/local/lib来解决类似的问题。但我没有root权限在要运行这个程序的系统上添加/删除文件。

还有其他方法可以解决这个问题吗?

更新:
我尝试将另一个版本的libstdc++.so.6目录添加到LD_PRELOAD中,但对我没用,它仍然使用了错误目录下的文件。

当我将正确的目录添加到LD_LIBRARY_PATH之前,也会出现同样的情况。最后,我尝试从LD_LIBRARY_PATH中删除所有其他内容,然后添加正确的目录(只是为了尝试)。这似乎修复了原始错误!但现在我在不同的位置收到相同的错误消息:

./bin/stipdet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /var/scratch/user/local/lib/libopencv_features2d.so.2.2)

显然opencv使用了不同的glibcxx版本,因此切换到另一个libstdc会破坏opencv。这个问题有没有解决的办法?

4个回答

4

如果您在其他地方安装了正确版本的libstdc++.so.6(例如在您的主目录中),您可以设置LD_LIBRARY_PATH或使用LD_PRELOAD,请参见什么是LD_PRELOAD技巧?


谢谢。我已经根据您的建议更新了我的问题。现在它在其他地方出现了错误 :( - Bart

0

如果您能告诉我们您正在使用的操作系统,那将会很有帮助。如果是 Solaris 操作系统,您可以尝试设置 LD_NOVERSION 来告诉运行时链接器忽略共享库版本。

export LD_NOVERSION=1


当我输入uname -a时,它显示Linux x86_64 x86_64 x86_64 GNU/Linux。当我登录系统时,它显示"基于CentOS 5"。 - Bart
1
很抱歉,在Linux中没有LD_NOVERSION的等效选项。 - jlliagre

0

我将文件A(/usr/lib64/libstdc++.so.6)复制到目录B(/opt/MATLAB/MATLAB_Compiler_Runtime/v711/sys/os/glnxa64),然后它就可以工作了。


0

libstdc++ FAQ可以回答您最初的问题:http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths

至于更新,这不应该发生。新的libstdc++.so应该在您的LD_LIBRARY_PATH中找到,并提供旧版本的所有符号。也许/var/scratch/user/local/lib/libopencv_features2d.so.2.2链接到了绝对路径,而不是SONAME libstdc++.so.6,您可以通过运行以下命令来检查:

ldd /var/scratch/user/local/lib/libopencv_features2d.so.2.2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接