필터 지우기
필터 지우기

Could not find matlabEngine using the following names: libMatlabEngine

조회 수: 9 (최근 30일)
Hi,
I am currently trying to run some MATLAB code in a c++ project. Obviously, to make things more complicated I am also new to both c++ and cmake.
So here is my top-Level CMakelists.txt:
cmake_minimum_required(VERSION 3.19)
project(matlabapi)
set(CMAKE_CXX_STANDARD 14)
# sets the matlab root directory
set(Matlab_ROOT_DIR /usr/local/MATLAB/R2021a)
# included directories
include_directories(${Matlab_ROOT_DIR}/extern/bin/glnxa64/)
# print all included directories
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "Included Directory is: '${dir}'")
endforeach()
# Libraries
find_library(matlabEngine libMatlabEngine REQUIRED)
# Executable
add_executable(matlabapi main.cpp)
# Linker stuff
target_link_libraries(matlabapi matlabEngine)
and the main.cpp which is the executable:
#include <iostream>
#include "MatlabEngine.hpp"
#include "MatlabDataArray.hpp"
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
From my understanding, Cmake should find the library here:
/usr/local/MATLAB/R2021a/extern/bin/glnxa64/
which includes two files:
libMatlabDataArray.so libMatlabEngine.so
What am I missing? Cmake throws the error in cmake configuration time:
CMake Error at CMakeLists.txt:17 (find_library):
Could not find matlabEngine using the following names: libMatlabEngine

채택된 답변

Kojiro Saito
Kojiro Saito 2021년 6월 30일
According to this document, we can know which compile options to be passed to g++.
g++ -std=c++11 -I <matlabroot>/extern/include/ -L <matlabroot>/extern/bin/glnxa64/ -pthread myEngineApp.cpp -lMatlabDataArray -lMatlabEngine
And when executing the MATLAB Engine API for C++, we need to add LD_LIBRARY_PATH.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:matlabroot/extern/bin/glnxa64:matlabroot/sys/os/glnxa64
With that, CMakeLists.txt would be the following.
cmake_minimum_required(VERSION 3.19)
project(matlabapi)
# As of R2021a, C++ version ~11 and 14 are supported
set(CMAKE_CXX_STANDARD 14)
# To avoid "undefined reference to symbol 'pthread_create@@GLIBC_x.x.x" error
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
# Set the matlab root directory
set(Matlab_ROOT_DIR /usr/local/MATLAB/R2021a)
# Set LD_LIBRARY_PATH for execution
set(LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${Matlab_ROOT_DIR}/extern/bin/glnxa65:${Matlab_ROOT_DIR}/sys/os/glnxa64)
# Included directories
include_directories(${Matlab_ROOT_DIR}/extern/include/)
# Print all included directories
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "Included Directory is: '${dir}'")
endforeach()
# Add linker search directories
link_directories(${Matlab_ROOT_DIR}/extern/bin/glnxa64)
# Executable
add_executable(matlabapi main.cpp)
# Linker stuff
# Linker to libMatlabDataArray in link_directories
target_link_libraries(matlabapi MatlabDataArray)
# Linker to libMatlabEngine in link_directories
target_link_libraries(matlabapi MatlabEngine)
Next, create a build directory and do cmake.
mkdir build
cd build
cmake ..
You will get CMakeCache.txt, CMakeFiles, cmake_install.cmake and Makefile. Build this file.
make
You will get matlabapi execution file. Then, run
./matlabapi

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 C Shared Library Integration에 대해 자세히 알아보기

태그

제품


릴리스

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by