【发布时间】: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 ********
我做了一些研究并找到了一些可能的解决方案:
问题是 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 复制到项目的当前工作目录,但仍然存在错误。
根据第一个答案,运行此命令
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 路径,但它不在文件中的任何位置。
从/usr/local/MATLAB/R2016a/bin$ 的 Matlab 目录我运行
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/libstdc++.so.6
但问题依然存在。
也许我没有以正确的方式应用解决方案,或者也许在其他地方我没有找到另一个解决方案。请告诉我,我很困惑!!!
【问题讨论】:
-
stackoverflow.com/questions/25929332/… -> 好像可以通过删除libstdc++.so.6解决
-
只要您的系统上安装了较新版本的 GCC,我只需删除 MATLAB 附带的 libstdc++ 文件就取得了不错的效果。
-
...当然,重命名或移动它而不是删除它更安全,所以如果事情变糟,你可以把它放回去。 :)
标签: matlab compilation conv-neural-network