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

РЕДАКТИРОВАТЬ НА ОСНОВЕ ОТВЕТОВ ТАК ДАЛЕЕ

поэтому я попытался связаться с библиотекой времени выполнения, включив -larmadillo в «Другие флаги компоновщика» проекта и добавив «/ usr / lib» к путям поиска в заголовке и библиотеке, но получаю ошибку ссылки: «ld : библиотека не найдена для -larmadillo ‘

какие-нибудь мысли о том, почему это может происходить?

/ usr / lib содержит следующие (соответствующие) файлы:

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

1

Решение

Вы не связываетесь с библиотекой времени выполнения броненосца (например, -larmadillo).

Чтобы это исправить, либо сконфигурируйте Xcode для связи с библиотекой времени выполнения armadillo, либо отредактируйте конфигурацию Armadillo так, чтобы он не использовал свою библиотеку времени выполнения.

Последнее делается путем редактирования «include / armadillo_bits / config.hpp» и комментирования ARMA_USE_WRAPPER. Затем вам нужно будет напрямую связываться с lapack и blas (например, -llapack -lblas) или использовать платформу Accelerate (например, -framework Accelerate).

2

Другие решения

Вам нужно связать разделяемую библиотеку броненосца. В 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. Ускорение рамки не является обязательным; Я никогда не использовал это.

1

По вопросам рекламы [email protected]