错误:版本`GLIBCXX_3.4.21'未找到

时间:2016-06-20 11:16:14

标签: matlab compilation conv-neural-network

我正在尝试使用Matlab 2016a在Ubuntu 16.04上编译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 ********

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

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

    问题是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'

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

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

    1. https://askubuntu.com/questions/719028/version-glibcxx-3-4-21-not-found
    2. 根据第一个答案,运行此命令     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. How to tell mex to link with the libstdc++.so.6 in /usr/lib instead of the one in the MATLAB directory?
      2. /usr/local/MATLAB/R2016a/bin$的Matlab目录开始运行 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/libstdc++.so.6

        但问题仍然存在。

        也许在那里我没有以正确的方式应用解决方案或者在其他地方我可能找不到另一种解决方案。请让我知道,我很困惑!!!

3 个答案:

答案 0 :(得分:4)

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

在控制台中执行:

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

答案 1 :(得分:1)

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

  

找到libstdc ++

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

enter image description here

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

  

export LD_PRELOAD =“ / usr / lib / x86_64-linux-gnu / libstdc ++。so.6.0.21”

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

答案 2 :(得分:-1)

有两种可能的解决方案:

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

  2. 安装此软件包:

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
    
  3. 可能你提到的第二个解决方案确实有效,但你之前已经完成了。因此,您无法再以相同的方式操作,因为您曾将/usr/lib/x86_64-linux-gnu/libstdc++.so.6usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6相关联。 TRY重启?

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