1

我在一个项目中使用犰狳,总的来说它运行良好。该项目是基于 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 设置有关

根据迄今为止的答案进行编辑

所以我尝试通过在项目的“其他链接器标志”中包含 -larmadillo 并将“/usr/lib”添加到标题和库搜索路径来链接到运行时库,但我收到链接错误:'ld : 找不到 -larmadillo 的库

关于为什么会发生这种情况的任何想法?

/usr/lib 包含以下(相关)文件:

  • libarmadillo.3.80.2.dylib
  • libarmadillo.3.dylib
  • libarmadillo.dylib
4

2 回答 2

2

您没有链接到犰狳运行时库(例如 -larmadillo)。

要解决此问题,请将 Xcode 配置为与犰狳运行时库链接,或编辑犰狳的配置使其不使用其运行时库。

后者是通过编辑“include/armadillo_bits/config.hpp”并注释掉 ARMA_USE_WRAPPER 来完成的。然后,您需要直接链接 lapack 和 blas(例如 -llapack -lblas),或使用 Accelerate 框架(例如 -framework Accelerate)。

于 2013-04-13T13:27:47.883 回答
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 框架是可选的;我从来没有使用过它。

于 2013-04-13T02:47:36.923 回答