错误:未找到版本“GLIBCXX_3.4.21”

Posted

技术标签:

【中文标题】错误:未找到版本“GLIBCXX_3.4.21”【英文标题】:Error: version `GLIBCXX_3.4.21' not found 【发布时间】:2016-06-20 11:16:14 【问题描述】:

我正在尝试在 Ubuntu 16.04 上使用 Matlab 2016a 编译 matconvnet-1.0-beta20。编译的初始阶段工作正常:

 untar('http://www.vlfeat.org/matconvnet/download/matconvnet-1.0-beta20.tar.gz') ;
 cd matconvnet-1.0-beta20
 run matlab/vl_compilenn

当我运行vl_simplenn(network, image) 时发生错误,它给出以下错误:

Invalid MEX-file '/home/matconvnet-1.0-beta20/matlab/mex/vl_nnconv.mexa64':
/usr/local/MATLAB/R2016a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version
`GLIBCXX_3.4.21' not found (required by /home/matconvnet-1.0-beta20/matlab/mex/vl_nnconv.mexa64)

为了了解问题的原因,我运行了/usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC,它没有给出任何输出bash: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: Permission denied more /usr/lib/x86_64-linux-gnu/libstdc++.so.6 也没有输出:

******** /usr/lib/x86_64-linux-gnu/libstdc++.so.6: Not a text file ********

我做了一些研究并找到了一些可能的解决方案:

    http://it.mathworks.com/matlabcentral/newsreader/view_thread/162466

问题是 MATLAB 在启动时偷偷改变了 LD_LIBRARY_PATH 指向GLIBC++的MATLAB版本,这样GLIBC++ 3.4.9就可以 不再被发现。 解决办法是修改matlab/bin/.matlab7rc.sh 以便“LDPATH_PREFIX”包含 GLIB 版本的路径 与您的编译器一起安装,然后在 matlab 提供的库。

所以我编辑了/usr/local/MATLAB/R2016a/bin/.matlab7rc.sh并将第195行的LDPATH_PREFIX=''修改为LDPATH_PREFIX='/usr/lib/x86_64-linux-gnu'

应用此更改后,问题仍然存在。

按照here的建议,我将.matlab7rc.sh 复制到项目的当前工作目录,但仍然存在错误。

    https://askubuntu.com/questions/719028/version-glibcxx-3-4-21-not-found

根据第一个答案,运行此命令 ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6 报错:

ln: failed to create symbolic link 'usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6': No such file or directory

似乎第二种解决方案建议更改.matlab7rc.sh 中的LD_PRELOAD 路径,但它不在文件中的任何位置。

    How to tell mex to link with the libstdc++.so.6 in /usr/lib instead of the one in the MATLAB directory?

/usr/local/MATLAB/R2016a/bin$ 的 Matlab 目录我运行 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/libstdc++.so.6

但问题依然存在。


也许我没有以正确的方式应用解决方案,或者也许在其他地方我没有找到另一个解决方案。请告诉我,我很困惑!!!

【问题讨论】:

***.com/questions/25929332/… -> 好像可以通过删除libstdc++.so.6解决 只要您的系统上安装了较新版本的 GCC,我只需删除 MATLAB 附带的 libstdc++ 文件就取得了不错的效果。 ...当然,重命名或移动它而不是删除它更安全,所以如果事情变糟,你可以把它放回去。 :) 【参考方案1】:

您需要在执行之前(在我的情况下为 matlab)添加库路径:

在控制台执行这个:

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 matlab

【讨论】:

【参考方案2】:

我遇到了同样的问题。 就我而言,为了解决它,我首先运行“定位”以列出系统中所有可能的库版本。

找到 libstdc++

例如,我在我的系统上报告结果

然后我通过导出环境变量来设置“lib”的最新版本:

导出 LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21"

因此,要设置的库的完整路径取决于它在系统中的分配位置。

【讨论】:

【参考方案3】:

有两种可能的解决方案:

    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/libstdc++.so.6

    安装这个包:

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
    

    也许你提到的第二个解决方案确实有效,但你以前做过。所以你不能再以同样的方式操作,因为你曾经将/usr/lib/x86_64-linux-gnu/libstdc++.so.6链接到usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6。尝试重新启动?

此外,您使用 MATLAB R2016a,但此命令适用于 R2014a。是你忽略了这一点吗?

【讨论】:

以上是关于错误:未找到版本“GLIBCXX_3.4.21”的主要内容,如果未能解决你的问题,请参考以下文章

Linux之编译gcc-9.1.0

Linux升级gcc

ubuntu源码安装gcc8.2.0

gcc升级后静态库要升级吗

错误:(2, 0) 未找到 ID 为“jetty”的插件

thymeleaf 版本 2.14 到 3.0 的迁移未找到消息属性