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

Woe*_*itg 3 matlab compilation conv-neural-network

我正在尝试在 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
Run Code Online (Sandbox Code Playgroud)

当我运行时发生错误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)
Run Code Online (Sandbox Code Playgroud)

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

******** /usr/lib/x86_64-linux-gnu/libstdc++.so.6: Not a text file ********
Run Code Online (Sandbox Code Playgroud)

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

  1. 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 提供的库之前找到它。

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

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

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

  1. 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

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

  1. 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

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

但问题仍然存在。


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

小智 6

您需要在执行之前(在我的例子中是matlab)添加库的路径:

在控制台中执行以下命令:

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 matlab
Run Code Online (Sandbox Code Playgroud)