犰狳:乘法时出错

时间:2013-04-12 15:40:12

标签: c++ xcode wrapper armadillo

我正在使用犰狳进行项目,总的来说它运作良好。该项目是基于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包含以下(相关)文件:

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

2 个答案:

答案 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框架是可选的;我从来没有用过它。