【问题标题】:Error: version `GLIBCXX_3.4.21' not found错误:未找到版本“GLIBCXX_3.4.21”
【发布时间】: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 ********

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

  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 提供的库。

所以我编辑了/usr/local/MATLAB/R2016a/bin/.matlab7rc.sh并将第195行的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

根据第一个答案,运行此命令 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 路径,但它不在文件中的任何位置。

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

但问题依然存在。


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

【问题讨论】:

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

标签: matlab compilation conv-neural-network


【解决方案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】:

      有两种可能的解决方案:

      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.6链接到usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6。尝试重新启动?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-13
        • 2016-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多