2011-10-03 88 views
1

我想编译一个共享库,它将在Ubuntu 11.04上调用MATLAB函数。像命令:错误,同时在Matlab 11.11上编译Matlab mex文件R2011a

mcc - B cpplib:libStepCluster StepCluster.m 

获取以下错误。

/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/lib/libppl_c.so.2) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libppl_c.so.2) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/lib/libppl.so.7) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libppl.so.7) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libgmpxx.so.4) 

我知道代码在Ubuntu 10.10中正常工作,并升级到Ubuntu 11.04。然后问题出来了。什么是问题,以及如何解决它,而没有太多的痛苦?

+0

请格式化你的答案,这将有助于回答 – Elpezmuerto

+0

@EricChu:看看这些讨论,并让我们知道是否有帮助(我没有测试过任何解决方案):http:// forums。 opensuse.org/english/get-technical-help-here/applications/443229-after-11-3-upgrade-matlab-compiler-fails-because-gcc.html,https://bbs.archlinux.org/viewtopic。 php?id = 86809 – Amro

+0

欣赏格式化... –

回答

0

根是GLIBCXX_3.4.14' not found。找一个类似的SO问题:GLIBCXX versions和@ninjalj答案,看来你有连接问题:

使用readelf -aobjdump -x优先 检查ELF文件strings。实际上,所有GLIBCXX_ *版本并不适用于整个 库,而是适用于每个符号(符号版本,请参阅DSO-howto)。所以你 可以在同一个库文件上有例如:std::char_traits<wchar_t>::[email protected]@GLIBCXX_3.4.5std::ios_base::Init::~Init()@@GLIBCXX_3.4

,你的程序需要GLIBCXX_3.4.9可能,这意味着它 已经对已引入/对GLIBCXX_3.4.9改变 语义符号链接。

+0

感谢您的回复。我为正确的gcc编译器配置了matlab。问题没有了。我没有机会尝试你的解决方案。还是谢谢。 –

1

MatLab R2011a编译错误解决方案。

下载并安装GCC-4.4

使用命令:mbuild -SETUP

选择选项1,然后你会得到一个文件中/usr/local/MATLAB/R2011a/bin/mbuildopts.sh定位

搜索文件,并用gcc-4.4

更换所有的编译器选项,然后编译它,它应该罚款!

0

我试图朱立伦的答案,但是这仅仅是为我工作的事情:

sudo ln -s /usr/lib/libstdc++.so.6 {MATLABROOT}/sys/os/{architecture}/libstdc++.so.6 

您将要备份的文件第一次。