犰狳:乘法时出错

问题描述 投票:1回答:2

我正在使用犰狳进行项目,总的来说它运作良好。该项目是基于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
c++ xcode wrapper armadillo
2个回答
2
投票

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

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

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


1
投票

您需要链接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框架是可选的;我从来没用过它。

© www.soinside.com 2019 - 2024. All rights reserved.