环境:
Matlab R2018
vs 2019 社区版
windows下所需的库1
路径:
{matlabroot}\extern\lib\win64\mingw64\
下的
引擎库
libMatlabEngine.lib
Matlab数据数组库
libMatlabDataArray.lib
Matlab Engine 头文件
路径: {matlabroot}\extern\include\
下的
{matlabroot}是在matlab命令行下"执行命令matlabroot"的运行结果,请务必更换掉
项目属性->VC++目录->外部包含目录
中添加路径{matlabroot}\extern\include\
项目属性->VC++目录->库目录
中添加路径{matlabroot}\extern\lib\win64\mingw64\
项目属性->链接器->附加依赖项
中添加libMatlabDataArray.lib
、libMatlabEngine.lib
使用以下代码2,测试刚刚搭建的项目是否成功。
#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include
void callSQRT() {
using namespace matlab::engine;
// Start MATLAB engine synchronously
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
//Create MATLAB data array factory
matlab::data::ArrayFactory factory;
// Define a four-element typed array
matlab::data::TypedArray<double> const argArray =
factory.createArray({ 1,4 }, { -2.0, 2.0, 6.0, 8.0 });
// Call MATLAB sqrt function on the data array
matlab::data::Array const results = matlabPtr->feval(u"sqrt", argArray);
// Display results
for (int i = 0; i < results.getNumberOfElements(); i++) {
double a = argArray[i];
std::complex<double> v = results[i];
double realPart = v.real();
double imgPart = v.imag();
std::cout << "Square root of " << a << " is " <<
realPart << " + " << imgPart << "i" << std::endl;
}
}
int main() {
callSQRT();
return 0;
}
编译中总是提示无法识别的符号
可以通过项目->属性->C/C++->语言
中关掉符合模式3
运行时找不到libMatlabDataArray.dll
然而借助Everythings搜索工具,查到该文件就在{matlabroot}\extern\bin\win64
和{matlabroot}\bin\win64
中
接下来就简单了,只需要添加动态链接库的目录到vs项目中。
在VS中设置=> 项目->属性->调试->环境, 添加如下
PATH = {matlabroot}\extern\bin\win64
或是
PATH = {matlabroot}\bin\win64
再次提醒: {matlabroot}是在matlab命令行下"执行命令matlabroot"的运行结果,请务必更换掉
使用CMake构建就直白多了。
cmake_minimum_required (VERSION 3.8)
project ("CMakeProject")
# 设置C++标准
set(CMAKE_CXX_STANDARD 14)
# 设置Matlab根目录(即安装目录)
set(Matlab_ROOT_DIR "D:/tools/matlab")
# 添加头文件目录
include_directories(${Matlab_ROOT_DIR}/extern/include)
# 调试输出所有包含的目录
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "Included Directory is: '${dir}'")
endforeach()
# 添加库目录
link_directories(${Matlab_ROOT_DIR}/extern/lib/win64/mingw64)
# 生成可执行文件
add_executable (${PROJECT_NAME}
CMakeProject.cpp
)
# 链接相应的lib
target_link_libraries(${PROJECT_NAME}
libMatlabDataArray
libMatlabEngine
)
如果是Linux上的用户可以参考以下链接
Build C++ Engine Programs —— MathWorks HelpCenter ↩︎
Test Your Build Environment —— MathWorks HelpCenter ↩︎
Error with Matlab Engine/Data API for C++ (EDIT: Resolved) ↩︎