我已经坚持了几个星期这个问题并一直在互联网上寻找解决方案,但到目前为止还不太好......
所以我有一个由其他人编写的程序,我尝试在Matlab中编译它以使其工作。我的电脑是Red-hat企业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行) 阿尔法= 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”)。
答案 0 :(得分:5)
@whjiang提出的解决方案有效,但有两个限制:
所以还有另一个。
正如本answer from MATLAB Central所解释的那样,问题是由Matlab引起的:
Matlab在内部将 LD_LIBRARY_PATH 更改为首选
<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
我的路径与os不同。例如,在我的LMDE2上,路径为/usr/lib/x86_64-linux-gnu/libstdc++.so.6
。
答案 1 :(得分:2)
这在libstdc ++ FAQ:http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths
中得到了解答答案 2 :(得分:1)
这是一个解决方案:
sudo ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19 / usr / local / MATLAB / R2011b / bin / glnxa64 / libstdc ++。so.6
答案 3 :(得分:1)
此页面中的简单解决方案(http://ubuntuforums.org/showthread.php?t=808045)对我有用。 转到存储libstdc ++。so.6和libgcc_s.so.1的matlab目录。就我而言,这是:
cd /usr/local/MATLAB/MATLAB_Production_Server/R2015a/sys/os/glnxa64
然后重命名libstdc ++。so.6和libgcc_s.so.1:
sudo mv libstdc++.so.6 libstdc++.so.6.orig
sudo mv libgcc_s.so.1 libgcc_s.so.1.orig
那就是它!