我在C ++中有一个很长的代码,我想从MATLAB中调用它。
我读到这一点,使用MEX文件,从MATLAB调用大型预先存在的C / C ++和Fortran例程,而不必将它们重写为MATLAB函数。
然而,MEX文件很麻烦,显然应该改变整个代码。此外,我在从MATLAB的命令行调用C / C ++编译器时遇到问题。特别是,MATLAB要求
Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2013a\sys\lcc
[2] Microsoft Visual C++ 2010 in D:\Program Files\Microsoft Visual Studio 10.0
但是我的代码是用Borland c ++编写的,但是MATLAB无法识别Borland作为编译器。
有没有比我目前更简单的方法,通过MEX文件在MATLAB中集成C / C ++代码?
答案 0 :(得分:6)
如user2485710所述,您应该使用MEX接口来调用现有的C ++代码。 MEX接口基本上是现有C ++代码的包装器。
例如,如果您的被叫是 add.c ,它会添加两个数字,您将无法在MATLAB中直接调用它。你的包装器应该是这样的,
#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]) { // Standard gateway function
double *a = mxGetPr(prhs[0]);
double *b = mxGetPr(prhs[1]);
double c = add(a,b);
mxSetPr(plhs[0], &c);
}
这是一个说明性示例,您可能必须阅读我使用的每个函数的文档。您无需担心编译器。大多数C ++程序适用于所有编译器。选择列表中的一个编译器并使用它。有一些限制,但我不知道有谁打过这个用例。
答案 1 :(得分:2)
从here读取,很明显Matlab可以与C或Fortran接口;那你怎么从C ++到C?您使用extern "C"
。
阅读here以获得关于该主题的快速介绍,但基本上只需要做,只需要extern
为C ++函数公开C接口,以便链接器和编译器知道如何正确构建C接口。
由于C ++和C提供的功能不同,FAQ还讨论了此解决方案的some limitations。
答案 2 :(得分:1)
作为使用MEX文件制作真正的matlab界面的替代方法,您也可以通过system calls简单地调用您的C ++程序。你必须首先将它需要的数据写入文件,这是低效的,但如果你不打算经常使用它,可能比写一个真正的接口更好。