错误:未找到版本“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”的主要内容,如果未能解决你的问题,请参考以下文章