我已经在这个问题上停留了几个星期,并且一直在 Internet 上四处寻找解决方案,但到目前为止还不是很好......
所以我有一个别人写的程序,我试着用 Matlab 编译它以使其工作。我的电脑是 Red-hat Enterprise Linux 工作站(64 位),安装了 gcc 4.4.3 和 Matlab 2011b。 gcc 与我的 Matlab ( http://www.mathworks.com/support/compilers/R2011b/glnxa64.html) 兼容。
编译工作正常(我的意思是,在 Matlab 命令窗口中没有出现错误消息)。但是在编译之后,每次当我使用编译中的特定函数(称为“mexLasso”)时,它都会显示如下错误:
*** 无效的 MEX 文件“/usr/local/matlab_R2011b/toolbox/spams-matlab/build/mexLasso.mexa64”: /usr/local/matlab_R2011b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: 版本 未找到“GLIBCXX_3.4.11”(要求 /usr/local/matlab_R2011b/toolbox/spams-matlab/build/mexLasso.mexa64)
测试错误(第 24 行) alpha=mexLasso(X,D,param);*
所以我在终端输入“strings/usr/lib/libstdc++.so.6 | grep GLIBC”,我发现“GLIBCXX_3.4.11”实际上在里面。
我使用 Linux 和 gcc 的东西才几个月...所以还有很多东西我不明白。如果您能详细解释一下,将会有很大的帮助。谢谢!!
%% 更多详情: 我从 http://spams-devel.gforge.inria.fr/downloads.html 获得了这些关于机器学习的程序.奇怪的是,在编译之后,该包中的其他函数可以正常工作(例如“mexTrainDL”)。
最佳答案
@whjiang 提示的解决方案有效但有两个限制:
- 您可能需要 sudo 权限才能更改库符号 链接。
- 变化是全局性的,可以影响所有用户
所以还有一个。
正如这 answer from MATLAB Central 所解释的那样,问题是由Matlab引起的:
Matlab internally changes the LD_LIBRARY_PATH to prefer
<MatlabPATH >/sys/os/<ARCH>
和 <MatlabPATH>/sys/os/libstdc++.so.6
已经过时了。
解决办法是这样调用Matlab时设置LD_PRELOAD,
env LD_PRELOAD=/usr/lib/libstdc++.so.6 <MatlabPATH>/bin/matlab -desktop
libstdc++.so.6
的路径我的操作系统不同。例如,在我的 LMDE2 上,路径是 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
.
关于c++ -/usr/../libstdc++.so.6 : version `GLIBCXX_3.4.11' not found (required by . ..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22564357/