您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 在matlab中调用c程序
1.Maltab编译Mex文件(不可调试)1.1helloword在matlab命令行中输入:mex-setup选择合适编译器,完成设置。新建一个文件,输入:#includemex.hvoidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){mexPrintf(Helloword!);}把上面程序保存为一个C文件,如hello.c在commandwindow下运行mexhello.c结束之后在currentfolder窗口里会有一个hello.mexw32文件。在commandwindow下运行hello()Helloword!1.2如果是多维数组并不能用Arr[i][j]的格式寻址,在参数在C里只是一维数组,一维数组按列排列,C语言是按行排列的,如[abcd;efgh]C语言在内存中是按abcdefgh排列,而matlab是按aebfcgdh排列的。如果要变成C语言可Arr[i][j]索引的格式,可用for循环转化打印函数:mexPrintf()相当于matlab的disp函数,mexPrintf函数里需要打印的部分必须用而不能用''子函数的问题:子函数有两种方式,一种采用return值得方式返回值另一种方式为利用参数返回值,把需要return的值直接赋给形参。多个.c文件的编译:多个.c文件中只能存在一个mexFunction函数可用mex('a.c','b.c','d.c')的格式编译2.在VS中调试mex(1)在vs中建立dll工程,建立project.cpp文件,输入#includeproject.h#includemex.hvoidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){mexPrintf(Helloword!);}建立.h文件,输入#includematrix.h#includemex.h#defineTESTMATLAB_EXPORTS#ifdefTESTMATLAB_EXPORTS#defineMEX_FUNCTION_API__declspec(dllexport)#else#defineMEX_FUNCTION_API__declspec(dllimport)#endifMEX_FUNCTION_APIvoidmexFunction(intnlhs,mxArray*plhs[],intnrhs,mxArray*prhs[]);建立project.def文件,输入LIBRARYEXPORTSmexFunction(2)添加include和lib路径若matlab为32位,liblujing为:D:\ProgramFiles\MATLAB\R2014a\extern\lib\win3264位则为:D:\ProgramFiles\MATLAB\R2014a\extern\lib\win64\microsoftinclude路径为:D:\ProgramFiles\MATLAB\R2014a\extern\include(3)添加链接器附加依赖项libmx.liblibeng.liblibmat.liblibmex.lib,将连接器输出的文件名称后缀,project.dll改为project.mexw32,64位改为project.mexw64(4)设置C/C++-代码生成-运行库为多线程调试(/Mtd)(5)若为64位matlab,还需将vs的编译平台设置为x64(6)生成解决方案,会在debug目录生成project.mexw64.(7)打开matlab,将工作目录改到如上debug目录,包含project.mexw64文件(8)开始调试,在vs中cpp文件设置端点,选择工具-附件到进程-matlab-添加,再在matlab中运行该文件,即可跳入端点处.(9)调试完成后,将project.mexw64放入matlab的目录中,可以直接调用
本文标题:在matlab中调用c程序
链接地址:https://www.777doc.com/doc-2561492 .html