C/C++程序通过动态链接库调用MATLAB程序
1 MATLAB编译器设置
需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件。
在MATLAB命令行输入:mex –setup;然后继续输入:mbuild –setup,选择已安装的VC编译器。
2 将MATLAB程序编译成C/C++动态链接库
假设存在一个Add.m的文件需要编译成库文件:
function C=Add(A,B) C=A+B; end
2.1 将MATLAB程序编译成C动态链接库
采用mcc编译选项:
>>mcc –W lib:libname file.m –T link:lib
采用捆绑命令文件:
>>mcc –B csharedlib:libname file.m
2.2 将MATLAB程序编译成C++动态链接库
采用mcc编译选项:
>>mcc –W cpplib:libname file.m –T link:lib
采用捆绑命令文件:
>>mcc –B cpplib:libname file.m
2.3 生成的文件格式
成功编译会在Add.m的路径下生成一些文件:
3 创建C/C++程序调用MATLAB函数
3.1 设置项目平台
根据MATLAB的位数(32或64),设置相应的项目平台。
3.2 工程环境设置
将前面生成的libAdd.dll、libAdd.h和libAdd.lib三个文件拷贝到新建的C++工程中,并设置工程属性。
- 项目属性——VC++目录——包含目录:
- 项目属性——VC++目录——库目录:
- 项目属性——链接器——输入:
libeng.lib libmat.lib libmex.lib libmx.lib mclmcrrt.lib mclmcr.lib libAdd.lib(最后这一个是Add.m生成的)
3.3 C++程序
#include <iostream> #include "libAdd.h" using namespace std; int main() { if (!libAddInitialize()) return -1; double a[4] = { 1,2,3,4 }; double b[4] = { 1,1,1,1 }; double c[4]; mwArray mwA(2, 2, mxDOUBLE_CLASS); mwArray mwB(2, 2, mxDOUBLE_CLASS); mwArray mwC(2, 2, mxDOUBLE_CLASS); mwA.SetData(a, 4); mwB.SetData(b, 4); Add(1, mwC, mwA, mwB); mwC.GetData(c, 4); cout << "mwC=\n" << mwC << endl; cout << "c=" << endl; for (int i=0;i<4;i++) { if (i%2==0) { cout<<endl; } cout<<‘\t‘<<c[i]; } cout<<endl; libAddTerminate(); return 0; }
输出结果:
时间: 2024-11-10 00:58:56