Я использую броненосец для проекта, и в целом он работает хорошо. Проект основан на 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 содержит следующие (соответствующие) файлы:
Вы не связываетесь с библиотекой времени выполнения броненосца (например, -larmadillo).
Чтобы это исправить, либо сконфигурируйте Xcode для связи с библиотекой времени выполнения armadillo, либо отредактируйте конфигурацию Armadillo так, чтобы он не использовал свою библиотеку времени выполнения.
Последнее делается путем редактирования «include / armadillo_bits / config.hpp» и комментирования ARMA_USE_WRAPPER. Затем вам нужно будет напрямую связываться с lapack и blas (например, -llapack -lblas) или использовать платформу Accelerate (например, -framework Accelerate).
Вам нужно связать разделяемую библиотеку броненосца. В 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. Ускорение рамки не является обязательным; Я никогда не использовал это.