matlab与C混合编程生成.mex文件

来源:互联网 发布:vegas pro for mac 编辑:程序博客网 时间:2024/05/01 15:52
今天在网上找了很多关于matlab与C混合编程生成.mex文件,但是都是一些蜻蜓点水式的说法,没有解决根本问题,后来看到这篇帖子:http://paulke.blog.163.com/blog/static/177891560201111281481432/,按照这篇帖子上的步骤走了一遍,最后出现了:
mex hello.c

  D:\SOFT\MATLAB~3\BIN\MEX.PL: Error: Compile of 'hello.c' failed. 

Error using mex (line 206)
Unable to complete successfully.

后来又根据这篇帖子:http://blog.sina.com.cn/s/blog_6ec1700e0100rqh9.html,将两者结合,最后完美解决问题,现在特此将所走的步骤贴出来,以帮助和我一样在路上的人!

正文如下:

一、VC6环境下的编译与调试Mex文件

    MATLAB的MEX文件其实就是一个动态链接库,他的输出函数是mexFunction()。也可以在VC建立相应的程序进行调试。 设置VC6环境,添加头文件和库函数

    1、在菜单tools(工具)下的option(选项)中选取Directories(目录),按照下图分布添加头文件和库文件。

         注意:这里添加的是matlab在自己电脑上的安装根目录。


                                                          

Figure 1 添加头文件



Figure 2 添加库文件


        2、创建一个Win32 Dynamic-Link Library工程实现MEX程序


                              
                                                                                  Figure 3 创建dll工程
          3、添加.c文件

#include "mex.h" 
void mexFunction(int nlhs, mxArray *plhs[], 
int nrhs, const mxArray *prhs[]) 

double *i; 
i=mxGetPr(prhs[0]); 
if(i[0]==1) 
  mexPrintf("hello,world!\n"); 
else 
  mexPrintf("大家好!\n"); 

          4、设置工程

在Project(工程)的setting(设置)在对象/库模块下设置如下图:libmx.lib libeng.lib libmat.lib libmex.lib

                 


Figure 4 设置工程

       5、设置动态调试程序的路径

选择MATLAB作为调试路径,在Project(工程)的setting(设置)--调试下设置如下图

路径均为matlab的安装根目录

                                


Figure 5 设置MATLAB调试路径

     6、在VC环境下对.c文件进行编译。

     7、点击执行按钮会启动matlab。

二、在matlab界面选择编辑器

     1、mex -setup;

     2、y;

     3、Select a compiler: 
[1] Lcc-win32 C 2.4.1 in D:\soft\MATLAB~3\sys\lcc 
[2] Microsoft Visual C++ 2010 in d:\soft\VC2010 
[3] Microsoft Visual C++ 6.0 in D:\soft 
 
[0] None 
 
Compiler: 1

注:若这里我选择1,则运行成功,最终可生产.mex文件,但是这种情况下程序中不支持有中文注释;若选择3,则会出现下列问题:

mex hello.c

  D:\SOFT\MATLAB~3\BIN\MEX.PL: Error: Compile of 'hello.c' failed. 

Error using mex (line 206)
Unable to complete successfully.
现在还不知道这里是什么原因,有待进一步的研究??

所以,这里根据我自己的电脑最好是选择2

       4、y.

       5、输入mex hello.c,编译成功,则会在hello.c所在文件下生成 .mexw32 文件。

       6、将这个程序编译通过后,执行hello(1),屏幕上会打出: hello,World!

 而hello(0)将会得到: hello,China!


后续又遇到的一些问题,一并贴出来:

1、 mex add.c
Specified export _mexFunction is not defined 
Missing exports. Aborting 
 
  D:\SOFT\MATLAB~3\BIN\MEX.PL: Error: Link of 'add.mexw32' failed. 
 
Error using mex (line 206)
Unable to complete successfully.

问题原因:MATLAB自带的LCC编译器不支持中文注释,而我的程序当中出现了中文注释,所以出现了上述问题