c++ -/usr/../libstdc++.so.6 : version `GLIBCXX_3.4.11' not found (required by . ..)

标签 c++ linux matlab gcc mex

我已经在这个问题上停留了几个星期,并且一直在 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 提示的解决方案有效但有两个限制:

  1. 您可能需要 sudo 权限才能更改库符号 链接。
  2. 变化是全局性的,可以影响所有用户

所以还有一个。

正如这 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/

相关文章:

c++ - OpenCV 中的连接组件

arrays - 将数组合并为一个字符串(matlab)

c++如何包含(循环依赖)?

c++ - c++中的黑屏消失得很快

c++ - 使用成员创建数组时的不同 -Wsign-conversion 行为

c - fseek 在超出 EOF 的位置上使用 feof 不会触发 EOF,这是怎么回事?

linux - 适用于 Linux 的 Visual Studio 代码。工作下载链接

matlab - bsxfun 不能像我期望的那样在常量函数上工作

c++ - Win32 MD5 哈希器的奇怪行为

linux - sed 命令仅过滤后跟逗号的一组数字