在 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 至少目前还没有出什么问题的。
Man, you’re great!
还以为这个问题无解来着,居然在这儿找到了解决方案。向博主表示感谢!
你好,我有个问题,就是我下载别人的工具包,放到当前目录下,但是我调用mexw32文件时,总是报找不到相应模块,可是明明在这路径下啊!我在网上搜了很多都没有解决,想问您有没有遇到过这种情况?(有些说法是版本问题)
谢谢。
如果是版本不对,尝试重新编译一下吧!
[…] /?p=421 This entry was posted in life, Our world and tagged life by mayasky. Bookmark the permalink. […]
所以linux有时候很让人绝望。。。windows下顺理成章的东西。
我也想用这个方法解决MEX的问题……想问问上面说过的软连接的修改具体应该如何做才行呢?
你好,请查一下软链接命令 ln 的帮助就知道了。
其实这个问题有一个比较简单的解决办法,就是把
libstdc++.so.6
从glnxa64/目录移走就可以了
可以新建一个backup文件夹,把libstdc++.so.6移入其中,另外还有别的提示错误的文件一并移入
6 年后碰到类似的问题居然在自己的 blog 里找到解决办法了…… =,=b