我正在尝试通过matlab here编译一个c++ubuntu项目。当我尝试在使用make命令进行编译后使用它时,我收到以下错误:
Invalid MEX-file
'////fashionista_v0.2/lib/+bsr/buildW.mexglx':
//local/MATLAB/R2011a/bin/glnx86/../../sys/os/glnx86/libstdc++.so.6: version
`GLIBCXX_3.4.11' not found (required by
////fashionista_v0.2/lib/+bsr/buildW.mexglx)
我不熟悉这些流程,所以我不能理解像that这样的几个提议的解决方案。什么是libstdc++和GLIBCXX,我如何解决这个问题?
我正在尝试使用来自nkjt的建议链接修复该问题:
export LD_LIBRARY_PATH=${prefix}/lib:$LD_LIBRARY_PATH
然而,由于缺乏Unix外壳知识,我不知道应该在命令中输入什么。我在GCC文件夹/usr/lib/gcc/i686-linux-gnu/4.6
中找到了libstdc++.a和.so文件,我正在尝试以下操作:
export LD_LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.6:$LD_LIBRARY_PATH
然而,我的matlab错误仍然存在。我使用的是带有GCC 4.6和MatLab r2011a的Ubuntu 12.04版本。
编辑:我已经将matlab版本更新到r2012a,问题仍然存在。我还尝试了以下几种方法:
sudo ln -s /usr/lib/cc/i686-linux-gnu/4.6/libstdc++.so libstdc++.so.6
我无法创建文件该文件已存在。
Usr/lib/libstdc++.so.6|grep GLIBC的输出:
GLIBCXX_3.4
GLIBCXX_3.4.1
...
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBC_2.0
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
如何确保定义了正确的libstdc++版本?
2条答案
按热度按时间fhg3lkii1#
MatLab(以及大量其他商业程序,如STeam、MATHEMICATA等)提供其自己版本的
libstdc++.so
:问题是,当您启动matlab时,它首先加载这个版本,因为它是加载的,所以这个版本用于解析所有动态加载器依赖项。
您使用您的系统GCC进行了编译,并链接到您的系统的
libstdc++
,后者是较新的。然后,生成的二进制文件请求某个(较新)版本的符号,而加载程序在已经加载的版本(即,MatLab的)中找不到它们。有两种方法可以解决这个问题:
1.*删除/重命名MatLab的
libstdc++.so
并将您的系统版本符号链接到完全相同的名称:Delete Matlab's version and let your OS's loader pick up the system's
libstdc++
:Use the environment variable
LD_PRELOAD
to "inject" the system's version oflibstdc++
into the execution environment before anything else, which prevents the old Matlab version to be loaded:ktca8awb2#
根据版本的不同,将其链接到类似于此的内容。