vs2010+matlab2010a的那些事

来源:互联网 发布:电脑软件不见了怎么办 编辑:程序博客网 时间:2024/06/07 22:03

问题:vs2010+matlab2010a配置mex -setup时找不到vs编译器

1下载VS2010MEXSupport.zip

2.在matlab的命令行中输入:unzip('x:..\VS2010MEXSupport.zip',matlabroot)

(或者是把VS2010MEXSupport.zip解压后,直接将里面的文件copy到 ..\MATLAB\R2010a\bin\win64\mexopts这个目录下,即可)


3.配置环境: mex -setup  (安装mex)

问题:mcc、mbuild和mex命令的区别

1. mcc将M文件转换成C/C++文件和相应的MEX包裹文件(需要Matlab编辑器),但在特定条件下可以自动调用mbuild或者mex

2. mex将C/C++文件(入口函数为mexfunction())编译成MEX(DLL)文件(需要C/C++编辑器)
3. mbuild将C/C++文件(入口函数为main())生成可独立运行的C应用程序(需要C/C++编辑器)


Matlab编译器(Lcc)在特定的条件下能自动调用mex和mbuild函数,尤其是mcc –x/-m/-p时。

一、mcc命令(有matlab到c/c++)

mcc函数实现由matlab的m文件转化为c/c++文件

命令格式为:mcc[-option]fun[fun2...][mexfile1...][mlifile...]

函数作用:将matlab程序中的fun.m转化为fun.c或fun.cpp

>> mcc -m filename : 将M文件filename.m翻译成C代码,生成的可执行文件能独立于Matlab运行环境。

>> mcc -p filename : 将M文件filename.m翻译成C++代码,生成的可执行文件能独立于Matlab运行环境。

>> mcc -B sgl filename : 如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C语言,并生成一个能独立于Matlab运行环境的可执行程序。

 >>mcc –B sgl cpp filename : 如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C++语言,并生成一个能独立于Matlab运行环境的可执行程序。

>> mcc -m -W lib:ahuang1900 -T link: ahuang1900.m :创建一个C函数库


二、mex命令(由c/c++到matlab ->mex)

写mex程序其实就是写一个DLL程序,因此我们可以使用c/c++,fortran等多种语言进行编写。

编写mex程序的编辑器可以使用matlab的代码编辑器,也可以使用 c/c++的编辑器,如vs2010等。

如:

#include <mex.h> void mexFunction( in nlhs, mxArray *plhs[], int nrhs,  const mxArray *prhs[]) { mexPrintf(" Mex Test.") } 
在matlab中:>> mex -g testMex.cpp 

mex的编译结果实际上就是一个带输出函数mexFunction的dll文件(其实到后来的matlab版本是生成.xx.mexw32/xx.mexw64).

函数 mexFunction函数,的声明如下:

 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){}

   其中,nlhs是输出参数个数,plhs是输出参数指针

用户可以在Matlab中按简单的M文件语法规则设计出来完成特定计算的算法。然后用Matlab编译器调用mex命令创建C共享库函数(DLL)或C++静态函数库,最后将它们整合到C/C++应用程序中,编译完这些C/C++应用程序,就可以用这些算法来实现特定的计算功能。当然这过程中也隐藏了算法和加快了代码的执行效率。由于MEX文件执行效率高,故如果有文件重名的话,Matlab将优先调用MEX文件。

三、mbuild命令(由c/c++ 和matlab 到 .exe)

   要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
   Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
   虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。


1. MEX文件和EXE文件的差别

   Mex文件与Matlab解释器在同一个过程空间运行,当用户调用一个MEX文件时Matlab解释器就会动态的连接到MEX文件。
可独立运行的C/C++应用程序(exe)可以独立于Matlab环境而运行,而MEX文件则不行,它需要Matlab的支持。还有EXE中可以调用MEX文件。

2.mex和mbuild编译的C/C++文件的差别

   使用mbuild命令编译的C/C++源文件中,必须包含main()函数,它能独立于Matlab运行。而mex命令编译的C/C++源文件中不含main()函数,它是以mexfunction()函数作为入口的,编译后生成的是mex文件,被Matlab调用。


参考:

1.http://dsalli0927.blog.163.com/blog/static/88807607201001395735820/

2.http://polleter1.blog.163.com/blog/static/46846553200681884039519/

3.http://bbs.sciencenet.cn/blog-432171-449826.html


0 0
原创粉丝点击