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を指定する方法を探しています。
ありがとう!