执行二进制文件:找不到“GLIBCXX_3.4.11”

时间:2011-06-08 20:13:50

标签: unix gcc opencv glibc

我正在尝试运行一些预编译的代码但是我收到以下错误:

./bin/stipdet: /cm/shared/apps/gcc/4.3.4/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./bin/stipdet)

我搜索了错误,发现有些人通过删除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 个答案:

答案 0 :(得分:4)

如果你已经在别处安装了正确版本的libstdc ++。so.6(例如在你的主目录中),你可以设置LD_LIBRARY_PATH或使用LD_PRELOAD,参见 What is the LD_PRELOAD trick?

答案 1 :(得分:0)

如果你告诉你正在运行什么操作系统会有所帮助。如果是Solaris,您可能希望尝试设置LD_NOVERSION以告知运行时链接程序忽略共享库版本。

export LD_NOVERSION=1

答案 2 :(得分:0)

libstdc ++常见问题解答回答了您的原始问题:http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths

对于更新,这不应该发生。应在您的libstdc++.so中找到较新的LD_LIBRARY_PATH thaqt,其中包含较旧版本的所有符号。可能/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

答案 3 :(得分:0)

我复制的文件A(在/ usr / lib64下/的libstdc ++。so.6)到词典B(/选择/ MATLAB / MATLAB_Compiler_Runtime / v711 / SYS / OS / glnxa64)和它的工作。