2016-05-23 7 views
0

MATLABとinfactの新機能は、シミュレーション目的でのみ扱います。 MATLABに共有ライブラリをインポートする際に問題が発生しました。 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') 

が続き、load target.soが呼び出されます。

また、私は、この問題を解決するためのMEX使用できることを承知しているが、私はそれがいいだろう、ということを避けることができれば、それは、変換コードの多くを必要とします。

mex -larmadillo -lgfortran target.so 

私は上記のことがたくさんあると言いました。私は何とかloadlibraryに-larmadilloを指定する方法を探しています。

ありがとう!

答えて

1

Matlabには入出力としてmxArray型が必要であるという問題があると思います。たとえば、ArmadilloライブラリはMat、Colなどを使用します。おそらく、まずそれをmexファイルにコンパイルする必要があります。 ArmadilloとLapackで構築する例として、私の仕事を見るかもしれません:http://sigpack.sourceforge.net/build.html

関連する問題