从c++应用程序调用MATLAB函数使用CMake构建在Visual Studio

28日视图(30天)
我想遵循的例子: //www.tianjin-qmedu.com/help/matlab/calling-matlab-engine-from-cpp-programs.html 从c++应用程序调用MATLAB代码我已经建在Visual Studio。
我做了一些修改的例子。我用一个h和cpp文件以及使用cmake的构建。
我有 testFeval.h
#包括“MatlabEngine.hpp”
#包括“MatlabDataArray.hpp”
#包括< iostream >
无效callSQRT ();
testFeval.cpp
#包括“testFeval.h”
无效callSQRT () {
使用名称空间matlab:引擎;
/ /开始MATLAB同步发动机
std:: unique_ptr < MATLABEngine > matlabPtr = startMATLAB ();
/ /创建MATLAB数据数组的工厂
matlab::数据::ArrayFactory工厂;
/ /定义一个研制出类型化数组
matlab::数据::TypedArray <双> const argArray =
工厂。createArray ({1,4}, {-2.0, 2.0, 6.0, 8.0});
/ /调用MATLABsqrt函数数据数组
matlab::数据::数组常量结果= matlabPtr - >函数宏指令(u“√”, argArray);
/ /显示结果
(int i = 0;我< results.getNumberOfElements ();我+ +){
一个= argArray[我];
std::复杂的<双> v =结果[我];
realPart = v.real ();
imgPart = v.imag ();
std:: cout < <“√”< < < <“是”< <
realPart< < " + " < < imgPart < < < < std:: endl“我”;
}
}
我使用CMake尝试运行Visual Studio的MATLAB引擎。
我的顶级CMake文件是:
#CMakeList。txt:顶级CMake项目文件,做全局配置
#这里包括子项目。
#
cmake_minimum_required(版本3.8)
项目(“CMakeProject1”C CXX)
#找到Matlab
需要FIND_PACKAGE (Matlab)
#包括子项目。
INCLUDE_DIRECTORIES (" $ {Matlab_ROOT_DIR} /外面的包括“)
add_subdirectory (" src ")#主要项目
CMake的项目是:
cmake_minimum_required(版本3.8)
#添加这个来源项目的执行。
集(HDR
MATLABExampleCall / testFeval.h
CMakeProject1.h
)#列出所有头文件。这样项目重建如果一个头文件被修改。
集(SRC
MATLABExampleCall / testFeval.cpp
CMakeProject1.cpp
)#列出所有源文件
add_executable (CMakeProject1美元{SRC}美元{HDR})#可执行的使用所有源和头文件
我不知道我做错了我的结构/使用MATLAB引擎?我能包括水电文件,但我得到当我试图构建链接器错误。有什么我错过吗?理想情况下,当这个工作我想使用相同的引擎实例化MATLAB对象并调用它们的方法。

接受的答案

凯尔R
凯尔R 2019年8月12日
编辑:凯尔R 2019年8月12日
所以我最终CMakeLists。txt正常工作与MATLAB c++ API, Visual Studio, Linux。发别人的解决我的问题。
我的CMakeList。项目目录中的txt现在看起来像这样:
add_executable (美元{PROJECT_NAME}美元{SRC}美元{HDR})
#链接c++ API
如果(WIN32)
消息(状态“链接窗口c++”)
target_link_libraries (美元{PROJECT_NAME}美元{Matlab_ROOT_DIR} /走读生/ lib / win64 /微软/ libMatlabEngine.lib)
target_link_libraries (美元{PROJECT_NAME}美元{Matlab_ROOT_DIR} /走读生/ lib / win64 /微软/ libMatlabDataArray.lib)
endif (WIN32)
如果(UNIX)
消息(状态“链接UNIX C + +”)
target_link_libraries (美元{PROJECT_NAME}美元{Matlab_ROOT_DIR} /走读生/ bin / glnxa64 / libMatlabEngine.so)
target_link_libraries (美元{PROJECT_NAME}美元{Matlab_ROOT_DIR} /走读生/ bin / glnxa64 / libMatlabDataArray.so)
find_package(线程)
target_link_libraries (美元{PROJECT_NAME}美元{CMAKE_THREAD_LIBS_INIT})
endif (UNIX)
这个修复所有问题:
#包括“MatlabEngine.hpp”
#包括“MatlabDataArray.hpp”
我能够启动一个会话MATLAB &处理引擎。

更多的答案(0)

s manbetx 845


释放

R2018b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!