linux系统中的C++/MATLAB混合编程

来源:互联网 发布:中国邮政网络陪训学院 编辑:程序博客网 时间:2024/05/16 07:41

我研究的是图像盲去模糊算法,因为前期MSDecomp预处理是在Linux下用C++写成的,而后面的优化过程均是用MATLAB写成的,因此我需要将这两部分的代码融合在一起。

这里记录的是我在虚拟机中在linux系统下实现MATLAB调用C++函数的过程。

   首先安装VMware,并选择系统文件为Ubuntu11.10操作系统,安装完后需要设置共享文件夹以便文件传输共享,具体操作是一方面设置VMware中Option的shared folder选择主机中的共享文件夹,然后在/etc/init.d/open-vm-tools末尾行增加一条语句:sudo mount -t vmhgfs .host:/  /mnt/hgfs, 即可实现在/mnt/hgfs中看到多出share文件夹用来共享了。   还要在linux系统中装上MATLAB,然后是对C++进行编译,用的是MEX命令。

   由于MATLABlinux版本下MEX只支持GCC到4.3.4版本,而系统一般装的都是最新的GCC版本,因此需要装个低版本的GCC,然后需要对/usr/bin/下gcc和g++进行重链接,sudo rm /usr/bin/gcc(or g++); sudo ln -fs $PATH/gcc-4.3.4(or g++-4.3.4) /usr/bin/gcc(or g++),这样就可以在MATLAB中调用linux的GCC编译器了。

   接下来是对MATLAB路径下的文件libstdc++.so.6进行重链接,使之链接到系统的libstdc,系统的libstdc应采用的在当前使用的GCC路径下,查找路径并链接即可。

   然后是开始用MATLAB的MEX对C++函数的编译过程,注意C++的函数中的静态库如果是在之前的GCC版本中生成的,则需要重新进行编译。

   要实现对C++函数的混编还需要在C++函数中编写void MexFunction()这个接口函数,接口函数中的可以用一套MEX的API函数实现自己的接口设置,并在头文件中加入mex.h,完成后便可用MEX命令了。

   MEX的格式为:mex -I$INCLUDEPATH -L%LIBPATH FunctionName.cpp SubFunName.cpp

   其中$INCLUDEPATH %LIBPATH 分别指的是C++工程的include路径以及lib路径,一般可直接引用MAKEFILE文件中的记录。

   不过在

   这样就可得到NAME.mexglx文件,在MATLAB中便可直接引用NAME()来实现对C++函数的调用。

原创粉丝点击