在Ubuntu上从C++调用Matlab可以通过以下几种方法实现,具体取决于您的需求(如直接调用Matlab函数、使用Matlab编译的C++共享库,或通过Matlab引擎API)。以下是详细的步骤和示例:
Matlab提供了官方的C++引擎API,允许直接在C++代码中调用Matlab函数,无需编译Matlab代码为独立库。
如果您的Matlab代码需要运行在未安装Matlab的环境中,需先安装Matlab Runtime(但Engine API本身不需要)。
R20XXx
替换为您的Matlab版本,如R2023a
)main.cpp
):
#include "MatlabEngine.hpp" // Matlab引擎头文件 #include "MatlabDataArray.hpp" #include <iostream> int main() { // 启动Matlab引擎 matlab::engine::MATLABEnginePtr matlabPtr = matlab::engine::startMATLAB(); // 执行Matlab命令 matlabPtr->eval(u"disp('Hello from Matlab!')"); // 调用Matlab函数 matlab::data::ArrayFactory factory; matlab::data::TypedArray<double> x = factory.createArray<double>({1, 3}, {1.0, 2.0, 3.0}); matlab::data::TypedArray<double> y = factory.createArray<double>({1, 3}, {4.0, 5.0, 6.0}); matlab::data::TypedArray<double> z = matlabPtr->feval(u"plus", x, y); // 输出结果 std::cout << "Result: "; for (auto val : z) { std::cout << val << " "; } std::cout << std::endl; return 0; }g++
编译,并链接Matlab的库:
g++ main.cpp -I/usr/local/MATLAB/R20XXx/extern/include \ -L/usr/local/MATLAB/R20XXx/extern/lib/glnxa64/microsoft \ -lmatlabengine -lmatlabdataarray -o matlab_call
注意:/usr/local/MATLAB/R20XXx/extern/lib/glnxa64/
(Linux)或/usr/local/MATLAB/R20XXx/extern/lib/maci64/
(macOS)。LD_LIBRARY_PATH
):bash复制export LD_LIBRARY_PATH=/usr/local/MATLAB/R20XXx/extern/lib/glnxa64:$LD_LIBRARY_PATH如果需要将Matlab代码编译为独立的C++库供其他程序调用:
libexample.h
libexample.so
(Linux)或 libexample.dylib
(macOS)g++
编译时,需指定Matlab生成的库路径和头文件:
g++ main.cpp -I/path/to/matlab/include -L/path/to/matlab/lib -llibexample -o matlab_lib_call如果只需执行Matlab脚本而不需交互,可以直接调用Matlab命令行:
#include <cstdlib>
int main() {
system("matlab -nodisplay -r \"run('your_script.m'); exit;\"");
return 0;
}
注意:此方法性能较差,且无法直接获取返回值。
-I
和-L
显式指定路径。LD_LIBRARY_PATH
:export LD_LIBRARY_PATH=/usr/local/MATLAB/R20XXx/extern/lib/glnxa64:$LD_LIBRARY_PATH领取专属 10元无门槛券
手把手带您无忧上云