c-将具有外部依赖性的共享库集成到MATLAB中,例如Armadillo、LAPACK、BLAS



我是MATLAB的新手,实际上,我只是为了模拟目的而处理它。我遇到了一个将共享库导入MATLAB的问题。假设我有一组复杂的c源文件,它们需要外部依赖关系,例如Armadillo或LAPACK。我们所做的是使用gcc或g++编译代码,将库链接到这些包的位置。

# 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库的位置,但我没有找到任何将它们连接在一起的方法。

以下内容很有道理,但armadillo并没有打包到dll中,它只是一个简单的脚本。

addpath('C:UsersDustinarmadilloarmadillo-6.600.4include');
loadlibrary('armadillo')

然后调用加载target.so.

我也知道我可以使用mex来解决这个问题,但这需要转换代码的ALOT,如果我能避免的话,那就太好了。

mex -larmadillo -lgfortran target.so

正如我所说的,以上将是大量的工作。我正在寻找一种在loadlibrary中指定-larmadillo的方法。

有什么建议吗??谢谢

我认为问题在于Matlab需要一个mxArray类型作为输入/输出。例如,Armadillo库使用Mat、Col等。您可能需要先将其编译为mex文件。作为一个用Armadillo和Lapack构建的例子,你可以看看我的作品:http://sigpack.sourceforge.net/build.html

相关内容

最新更新