2016-05-23 7 views
0

Новое для 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.

Любые советы ?? Спасибо!

ответ

1

Я думаю, проблема в том, что Matlab требует типа mxArray в качестве ввода/вывода. Например, в библиотеке Armadillo используется Mat, Col и т. Д. Возможно, вам придется сначала скомпилировать его в файл mex. В качестве примера, чтобы построить с Armadillo и Lapack вы можете посмотреть мои работы: http://sigpack.sourceforge.net/build.html

 Смежные вопросы

  • Нет связанных вопросов^_^