|
1.编译m文件为可执行文件
mex -setup设置好了c编译器之后。
写个简单函数test.m
- function test
- x=0:0.01:2*pi;
- y=sin(x);
- plot(x,y)
复制代码
保存.
编译mcc -m test.m
就会生成可执行的文件test和一个脚本run_test.h
./run_test.h <matlab_root>/bin
2.C中调用matlab计算引擎(绘图等)
步骤:
(1)安装csh;
(2)设置:动态库路径LD_LIBRARY_PATH中添加<matlab_root>/bin/<Arch>;
PATH路径中添加<matlab_root>/bin
(3)编译:gcc test.c -o test -I $HOME/MATLAB/R2011b/extern/include -L $HOME/MATLAB/R2011b/bin/glnx86/ -leng -lmx -lmex
(注意cpu是x86还是a64)
(4)运行:./test
(参考:http://hi.baidu.com/36470902/blo ... 3c175c08230250.html)
其中第(2)步设置,在~/.bashrc中添加:
- MATLAB="Matlab_Installed_Directory" (比如说我的安在了$HOME/MATLAB/R2011b下面,所以应该写全到2011b)
- export PATH=~/Program:$MATLAB/bin:$PATH
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MATLAB/bin/glnx86 #这里注意cpu是x86还是a64
- export C_INCLUDE_PATH=$C_INCLUDE_PAT:$MATLAB/extern/include
- export LIBRARY_PATH=$LIBRARY_PATH:$MATLAB/bin/glnx86
复制代码
(前面两行是一个是可执行文件搜索路径,一个是动态库搜索路径,后面两个是gcc编译时的include头文件搜索路径和动态库搜索路径)
这样第三步编译就可以简单的写为:
gcc test.c -o test -leng -lmx -lmex
源文件test.c如下:
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "engine.h"
- #define N 500
- main()
- {
- int i;
- double x[N],y[N];
- Engine *ep;
- for(i=0;i<N;i++){
- x<i>=0.01*i;
- y<i>=sin(x<i>);
- }
- //启动matlab计算引擎,异常处理
- if(!(ep=engOpen(NULL))){
- printf("Can't start Matlab engine!");
- exit(1);
- }
- //定义mxArray
- mxArray *xx=mxCreateDoubleMatrix(1,N,mxREAL);
- mxArray *yy=mxCreateDoubleMatrix(1,N,mxREAL);
- //将数组复制到mxArray
- memcpy(mxGetPr(xx),x,N*sizeof(double));
- memcpy(mxGetPr(yy),y,N*sizeof(double));
- //将mxArray数组写入到Matlab工作空间,并命名
- engPutVariable(ep,"xx",xx);
- engPutVariable(ep,"yy",yy);
- //向Matlab引擎发送画图命令
- engEvalString(ep,"plot(xx,yy);");
- printf("Press 'Enter' to exit!");
- getchar();
- //销毁mxArray数组
- mxDestroyArray(xx);
- mxDestroyArray(yy);
- //关闭matlab引擎
- engClose(ep);
- }</i></i></i>
复制代码
|
|