【问题标题】:error while compiling Matlab mex file on Ubuntu 11.04 with Matlab R2011a使用 Matlab R2011a 在 Ubuntu 11.04 上编译 Matlab mex 文件时出错
【发布时间】:2011-11-30 04:18:24
【问题描述】:

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

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。然后问题就出来了。是什么问题以及如何在没有太多痛苦的情况下解决它?

【问题讨论】:

  • 请正确格式化您的答案,这将有助于回答
  • @EricChu:看看这些讨论,如果有帮助,请告诉我们(我自己没有测试过任何解决方案):forums.opensuse.org/english/get-technical-help-here/…bbs.archlinux.org/viewtopic.php?id=86809
  • 欣赏格式...
  • 其实。后来我发现了问题。 ubuntu11.04 自带 gcc-4.5,但是 MatlabR2011a 的默认编译器是 gcc-4.3.4。我搜索了一下发现Matlab2011仍然支持gcc-4.4。我下载并安装了它。使用命令 mbuild -setup 为 matlab 配置支持的 gcc-4.4。重新编译,问题就消失了。感谢您的回复。
  • @EricChu:您应该将其作为解决方案发布(接受您自己的答案是完全可以的)。顺便说一句,您可以在此处查看支持的编译器列表:mathworks.com/support/compilers/R2011b/glnxa64.html

标签: c++ matlab ubuntu mcc matlab-compiler


【解决方案1】:

MatLab R2011a 编译错误解决方案。

下载并安装 GCC-4.4

使用命令:mbuild -setup

选择选项 1,然后您将在 /usr/local/MATLAB/R2011a/bin/mbuildopts.sh 中找到一个文件

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

然后编译,应该没问题!

【讨论】:

    【解决方案2】:

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

    使用readelf -aobjdump -x 优先检查ELF文件 到strings

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

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

    【讨论】:

    • 感谢您的回复。我为正确的 gcc 编译器配置了 matlab。问题消失了。我没有机会尝试您的解决方案。还是谢谢。
    【解决方案3】:

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

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

    您需要先备份文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多