MinGW调用MATLAB编译mex

MinGW调用MATLAB编译mex
2009-07-27 09:04
我刚刚研究出来的一种新方法。
以后可以直接在MinGW上使用makefile大批量的编译mex文件了。
阅读本文必须先理解我的上一篇文章gnumex - Matlab下调用gcc编译
操作步骤:
假设你已经成功的安装了gnumex并且已经测试运行成功了。那么接着进行如下安装步骤。
1. 把gnumex中设置的path for library and .def那个目录和所有的文件全部拷贝一份,放到你的MinGW目录下。例如放在/gnumex。(里面会有一些编译mex用的lib和def文件)
2. 在你项目的makefile里定义MATLAB所需的变量和MEX命令。
# Using Matlab interface for compiling MEX C code.
# 需要修改成你自己的matlab安装路径
MATLABROOT = /D/MATLABR2008
# 需要修改成你自己的gnumex路径,就是1中要你复制的那个目录
MATLABLIBDIR = /gnumex
MATLABDEF = ${MATLABLIBDIR}/mex.def
MATLABOPTIONS = -O3 -DMATLAB_MEX_FILE -DMX_COMPAT_32 -shared
MATLABINCLUDE = -I${MATLABROOT}/extern/include -I${MATLABROOT}/simulink/include
MATLABLIB = -llibmx -llibmex -llibmat
MEX = gcc ${MATLABOPTIONS} ${MATLABDEF} ${MATLABINCLUDE} -L${MATLABLIBDIR}
以上变量中需要修改的只有前两个变量 MATLABROOT和MATLABLIBDIR。
3. 调用MEX编译的时候需要加入 MATLABLIB
例如:
${MEX} yourcode.c -o yourfunction.mexw32 ${MATLABLIB}
这样就可以成功的编译出MATLAB可以直接调用的mexw32文件了(其实就是一个dll文件)。
PS: 如果是DOS命令行上调用MinGW,那么请修改上面路径的书写方式。如:
/D 改成D:\
/ 改成\
还有/开头表示root,请改成你的MSYS的root在windows上的绝对路径。
测试实例:
三个文件,yprime.c,make.inc,Makefile
1. yprime.c 直接使用Matlab里的例子
2. 制做make.inc文件
# Using Matlab interface for compiling MEX C code.
# 需要修改成你自己的matlab安装路径
MATLABROOT = /D/MATLABR2008
# 需要修改成你自己的gnumex路径,就是1中要你复制的那个目录
MATLABLIBDIR = /gnumex
MATLABDEF = ${MATLABLIBDIR}/mex.def
MATLABOPTIONS = -O3 -DMATLAB_MEX_FILE -DMX_COMPAT_32 -shared
MATLABINCLUDE = -I${MATLABROOT}/extern/include -I${MATLABROOT}/simulink/include
MATLABLIB = -llibmx -llibmex -llibmat
MEX = gcc ${MATLABOPTIONS} ${MATLABDEF} ${MATLABINCLUDE} -L${MATLABLIBDIR}
3. 制作Makefile文件
include make.inc
default:
make all
all:
${MEX} yprime.c -o yprime.mexw32 ${MATLABLIB}
clean:
mv *.o *.exe
这样就制作完成了。
输入命令 make就自动生成yprime.mexw32文件了。MATLAB上测试一切正常。
kaien 26/07/2009 夜
Tags: 

延伸阅读

最新评论

发表评论