Новое для MATLAB и infact, я имею дело только с ним для целей моделирования. Я столкнулся с проблемой импорта совместно используемых библиотек в MATLAB. Скажем, у меня есть сложный набор исходных файлов c, для которых требуются внешние зависимости, такие как Armadillo или LAPACK. мы делаем компиляцию кода с помощью gcc или g ++, где мы связываем библиотеки с расположением этих пакетов.Интеграция общих библиотек с внешними зависимостями в MATLAB | т.е. Armadillo, LAPACK, BLAS
# Directories and Includes for Lin-Alg Libs
ARMA_INCLUDE = -I../../../armadillo/armadillo-6.600.4/include/
LAPACK_LIB = -L../../../lapack/lib/
BLAS_LIB = -L../../../lapack/lib/
ALL_INCLUDES = $(ARMA_INCLUDE) $(LAPACK_LIB) $(BLAS_LIB)
# Target Class
TARGET = target
# Compiler choice | Operation Code
CXX=g++
OPT = -O2
CXXFLAGS = $(CXX) $(OPT)
$(TARGET).so: $(TARGET).o $(OBJ_FILE)
g++ -shared -Wl,--export-dynamic $(TARGET).o -o $(TARGET).so $(ALL_INCLUDES) $(LIB_FLAGS)
$(TARGET).o: $(TARGET).cpp
$(CXXFLAGS) $(ARMA_LIB) $(ALL_INCLUDES) $(LIB_FLAGS) -DARMA_DONT_USE_WRAPPER -c target.cpp
Это работает, и я могу позвонить в библиотеки именно так, как я намерен. Теперь я перехожу в среду matlab и набираю следующее.
loadlibrary(target.so, 'target.h')
Я получаю следующее сообщение об ошибке ...
Error using loadlibrary
Failed to preprocess the input file.
Output from preprocessor is target.h:1:21: fatal error:
armadillo: No such file or directory
#include <armadillo>
^
compilation terminated.
Error in MOculusEKF (line 5)
loadlibrary('target.so', 'target.h')
Я понимаю, что есть проблема с MATLAB и не видя расположение библиотек броненосцев, но я не нашел ничего на связывая их вместе.
Следующее имеет смысл, но armadillo не упакован в dll, его простой скрипт.
addpath('C:\Users\Dustin\armadillo\armadillo-6.600.4\include');
loadlibrary('armadillo')
с последующим вызовом на загрузку target.so.
Я также знаю, что я мог бы использовать mex для решения этой проблемы, но для этого потребуется ALOT кода преобразования, если бы я мог этого избежать, было бы хорошо.
mex -larmadillo -lgfortran target.so
Как я уже говорил, это было бы большим успехом. Я ищу способ указать -larmadillo как-то в loadlibrary.
Любые советы ?? Спасибо!