如何用C++调用Matlab函数
How to Call Matlab Functions from C++
我想在C++项目中调用MATLAB函数。
我使用的是Matlab R2010a和Visual Studio 2010
首先我创建了一个简单的matlab函数:
function y = foo(x)
y = x+1;
然后我使用matlab编译器使用matlab GUI编译器(文件->新->部署项目,然后选择C++共享库)来编译这个函数。它生成两个文件夹:distrib和src。
distrib包含:
- foo.dll
- foo.h
- foo.lib
src包含:
- foo.cpp
- foo.dll
- foo.exp
- foo.exports
- foo.h
- foo.lib
- foo_mcc_component_data.c
我想在C++应用程序中使用此文件。我试了很多次,都没找到办法。我在互联网上找到的所有方法都是使用旧的matlab编译器,它可以生成不同的文件或在旧版本的visualstudio上工作。
有人能帮我吗?
我该怎么办?我必须添加哪些文件/引用以及添加到哪里?我必须定义哪些路径?
也许为时已晚,但对于未来来说。
包括foo.h
。
将C/C++-General Additional Include Directories添加到matlab头文件(C:Program Files (x86)MATLABR2009bexterninclude
)中。
为附加依赖项中的链接器添加foo.lib
、mclmcrrt.lib
和mclcommain.lib
。
对于中的链接器,附加库目录显示了通往matlab库的方法(32位版本的C:Program Files (x86)MATLABR2009bexternlibwin32microsoft
(matlab和VS版本应该相同。我必须安装第二个32位版本。)。
我在系统路径中添加了到foo.lib
的方法。
在使用库foo.dll
之前,您应该初始化MCR和库函数。
mclInitializeApplication(NULL,0);
fooInitialize();
使用后不要忘记:
mclTerminateApplication();
fooTerminate();
还有一些演示代码,看起来像:
int num = 1;
double numbrIn = 1.5;
std::cout<<"now we have " << numbrIn << std::endl;
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL);
array_in.SetData(&numbrIn,num);
mwArray array_out;
foo(1, array_out, array_in);
array_out.GetData(&numbrIn, num);
std::cout<<"now we have " << numbrIn << std::endl;
编译应用程序需要文件foo.h
和foo.lib
。foo.dll
文件需要与生成的应用程序一起提供,通常位于同一目录中。
如果将foo.h
文件与源文件放在同一目录中,则无需对#include "foo.h"
执行任何特殊操作。您也可以在外部链接器依赖项中添加到foo.lib
的直接路径。
如果你想将这些文件存储在项目文件夹之外和/或在其他应用程序中重复使用这些文件,你可以阅读VC++目录、项目和解决方案。
编辑:您可能还需要将MATLAB库添加到include和库路径中。查看MathWorks支持解决方案为什么在尝试编译独立应用程序时收到错误"找不到包含文件"mclmcrrt.h"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- 如何在C++中编写 MATLAB fix(X) 函数?
- 将C++中的多个参数传递给MatLab共享库函数
- 使用 Boost 的 UDP 通信(用于 MATLAB s 函数)
- 如何使用 Matlab 函数 ordfilt2 与 OpenCV C++
- MATLAB函数手柄和C 功能指针
- MATLAB S函数构建器如何将编译器更改为G
- 传递用于在 C++ 中调用 MATLAB 函数的参数
- 从C 调用的编译MATLAB函数的输入参数结构
- 将 MATLAB 函数编译成可以在 linux 终端上运行的东西,w.out MATLAB
- NDGRID MATLAB 函数的工作原理
- matlab函数fzero的C/C++实现
- Matlab函数"quad"在Java和C++中可用吗?
- 如何在c++中使用MATLAB函数randn
- 是否有任何现有的库在C/CPP/Obj-C中实现matlab函数
- matlab c共享库:用mxArray*/mxArray**捕获matlab函数输出
- 在不使用OpenCV的C++中高效实现MATLAB函数"imfill(BW,'holes') "
- 延迟调用MATLAB函数
- 如何用C++调用Matlab函数