Could not find matlabEngine using the following names: libMatlabEngine
8 views (last 30 days)
Show older comments
Eric Schöneberg
on 29 Jun 2021
Answered: Kojiro Saito
on 30 Jun 2021
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
0 Comments
Accepted Answer
Kojiro Saito
on 30 Jun 2021
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 Comments
More Answers (0)
See Also
Categories
Find more on C Shared Library Integration in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!