Categories

解决 Matlab MEX 编译时 GCC 版本的问题

在 Matlab 里使用 mex 来编译 C/C++ 代码失败,这个问题算是困扰了我好几个月了,主要是我的环境比较恶劣:系统是 Arch Linux ,感觉这个系统比较喜欢追求最新版本,比较无视老版本软件的兼容性问题吧。再加上系统是 64 位的,出现各种兼容性问题似乎也觉得是理所当然的,然后像 Matlab 这样的软件通常使用较老版本的 GCC ,而 GCC 更新的时候又做了一些大改动,总之结果是我每次试图编译的时候都得到类似这样的错误:

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libgmpxx.so.4)

因为 GCC 新版本里把 GLIBCXX_3.4.11 这个符号去掉了,所以挂掉了。搞得我每次需要运行 mex 编译的代码都要放到另外一台 Windows 机器上跑。也 Google 了很多次都没有找到解决方案。今天一怒之下用了最暴力的方法:/opt/matlab/sys/os/glnxa64/libstdc++.so.6 其实是指向该目录下的另一个文件 libstdc++.so.6.0.9 的软连接,我将他改成指向系统里的新版本的 libstdc++:/usr/lib/libstdc++.so.6.0.13 ,结果问题解决了。那个目录下还有一个 README ,说了这几个文件是从 GCC distribution 里拷贝过来的。于是这样用新版本覆盖应该不会有太大的问题吧? :p 至少目前还没有出什么问题的。

10 comments to 解决 Matlab MEX 编译时 GCC 版本的问题