我正在使用犰狳进行项目,总的来说它运作良好。该项目是基于Xcode的,到目前为止,我设法使其工作的唯一方法是(添加/ usr / include /的头部搜索路径似乎不起作用):
#include "/usr/include/armadillo"
那么现在我第一次尝试做一些矩阵乘法,我做了最简单的事情,我能想到确保没有其他原因。
mat aa = eye(3,3)*eye(3,3);
但这给了我链接器错误:
*“_ wrapper_dgemm_”,引自:
void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)in DynamicGridPoint.o
有人知道是什么原因引起的吗?示例(包括矩阵乘法)从命令行编译得很好,所以我假设这与我的xcode设置有关
基于答案的编辑
所以我试图通过在项目的'Other Linker Flags'中加入-larmadillo来链接到运行时库,并将'/ usr / lib'添加到Header和Library搜索路径,但是我收到链接错误:'ld :找不到-larmadillo'的库
关于为什么会发生这种情况的任何想法?
/ usr / lib包含以下(相关)文件:
你没有链接到犰狳运行时库(例如-larmadillo)。
要解决此问题,请将Xcode配置为与armadillo运行时库链接,或者编辑Armadillo的配置以使其不使用其运行时库。
后者是通过编辑“include / armadillo_bits / config.hpp”并注释掉ARMA_USE_WRAPPER来完成的。然后,您需要直接链接lapack和blas(例如-llapack -lblas),或使用Accelerate框架(例如-framework Accelerate)。
您需要链接armadillo共享库。在示例中的Makefile中,要制定的规则是:
all: example1 example2
example1: example1.cpp
$(CXX) $(CXXFLAGS) -o $@ $< $(LIB_FLAGS)
LIB_FLAGS
早先被定义为
LIB_FLAGS = -larmadillo $(EXTRA_LIB_FLAGS)
ifeq (macos,macos)
EXTRA_LIB_FLAGS = -framework Accelerate
endif
因此,在您的XCode项目中,您需要找到一种包含libarmadillo的方法。 Accelerate框架是可选的;我从来没用过它。