首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Matlab R2011a在Ubuntu11.04上编译Matlab mex文件时出错

问使用Matlab R2011a在Ubuntu11.04上编译Matlab mex文件时出错
EN

Stack Overflow用户
提问于 2011-10-04 03:26:05
回答 3查看 3.2K关注 0票数 1

我正在尝试编译一个共享库,它将在Ubuntu 11.04上调用MATLAB函数。就像命令一样:

代码语言:javascript
复制
mcc - B cpplib:libStepCluster StepCluster.m

得到以下错误。

代码语言:javascript
复制
/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。然后问题就出现了。问题是什么?如何在不太痛苦的情况下解决它?

EN

回答 3

Stack Overflow用户

发布于 2011-10-26 23:07:22

MatLab R2011a编译错误解决方案。

下载并安装GCC-4.4

使用命令: mbuild -setup

选择选项1,然后您将获得一个位于/usr/local/MATLAB/R2011a/bin/mbuiltopts.sh中的文件

搜索文件并将所有编译器选项替换为gcc-4.4

然后编译它,它应该是好的!

票数 1
EN

Stack Overflow用户

发布于 2011-10-04 03:46:37

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

优先使用readelf -a和objdump -x检查ELF文件,而不是strings。

实际上,所有的GLIBCXX_*版本并不适用于整个库,而是适用于每个符号(符号版本控制,请参阅DSO-howto)。所以你可以在同一个库文件中使用例如:std::char_traits<wchar_t>::eq@@GLIBCXX_3.4.5和std::ios_base::Init::~Init()@@GLIBCXX_3.4。

您的程序需要GLIBCXX_3.4.9这一事实可能意味着它已经链接到一个已经在GLIBCXX_3.4.9上引入/改变了语义的符号。

票数 0
EN

Stack Overflow用户

发布于 2012-02-07 18:52:11

我尝试了Eric Chu的答案,但这是唯一对我有效的方法:

代码语言:javascript
复制
sudo ln -s /usr/lib/libstdc++.so.6 {MATLABROOT}/sys/os/{architecture}/libstdc++.so.6

您需要先备份该文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7639666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档