我正在使用犰狳进行项目,总的来说它运作良好。该项目是基于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包含以下(相关)文件:
答案 0 :(得分:2)
你没有链接到犰狳运行时库(例如-larmadillo)。
要解决此问题,请将Xcode配置为与armadillo运行时库链接,或者编辑Armadillo的配置以使其不使用其运行时库。
后者是通过编辑“include / armadillo_bits / config.hpp”并注释掉ARMA_USE_WRAPPER来完成的。然后,您需要直接链接lapack和blas(例如-llapack -lblas),或使用Accelerate框架(例如-framework Accelerate)。
答案 1 :(得分:1)
您需要链接犰狳共享库。在示例的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框架是可选的;我从来没有用过它。