我正在尝试编译一个共享库,该库将在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。然后问题就出来了。问题是什么?如何在不太痛苦的情况下解决它?
MatLab R2011a编译错误解决方案。
下载并安装GCC-4.4
使用命令:mbuild-setup
选择选项1,然后您将在/usr/local/MATLAB/R211a/bin/mbuildopts.sh 中获得一个文件
搜索文件并用gcc-4.4 替换所有编译器选项
然后编译它,它应该是好的!
根是GLIBCXX_3.4.14' not found
。看看类似的SO问题:GLIBCXX版本和@ninjalj的答案,似乎你有一个链接器问题:
使用
readelf -a
和objdump -x
检查首选项中的ELF文件至CCD_ 4。实际上,所有的GLIBCXX_*版本并不适用于整个库,但适用于每个符号(符号版本控制,请参阅DSO操作指南(。所以你可以具有例如:
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上的语义。
我试过Eric Chu的答案,但这是唯一对我有效的方法:
sudo ln -s /usr/lib/libstdc++.so.6 {MATLABROOT}/sys/os/{architecture}/libstdc++.so.6
您将希望首先备份该文件。