Я пытаюсь выяснить ошибку, которая помешала мне сделать R-пакет «whyNotWork» с помощью RcppArmadillo. Пакет содержит только один .cpp файл с одной простой функцией, которая возвращает собственные значения матрицы:Создание R-пакета с использованием RcppArmadillo в Rstudio соответствует ошибке «неопределенная ссылка на dsyev»
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
// [[Rcpp::export]]
arma::vec getEigenValues(arma::mat M)
{
return arma::eig_sym(M);
}
В описании файла я добавил:
Imports:
Rcpp (>= 0.12.1), RcppArmadillo
LinkingTo:
Rcpp, RcppArmadillo
Depends: RcppArmadillo
В NAMESPACE файл я добавил:
Эта функция работает нормально, если я не пытался сделать пакет - кнопка «источник» успешно загрузит функцию, и она работает правильно. Тем не менее, при создании пакета, нажав кнопку «Построить & Reload» даст следующее сообщение об ошибке:
arma.o:arma.cpp(.text$_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE[_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE]+0x28d): undefined reference to `dsyev_'
Я гугле «dsyev» и, кажется, связано с LAPCAK ..
Решение:
Новый .txt-файл в папке src. Add
PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
в файле.
Переименуйте файл txt как Makevars.win (если это не система Windows, нет .win). Пакет успешно выполнен.
Решение найдено путем сравнения файлов, генерируемых из RcppArmadillo.package.skeleton()
и те из Rstudio
Для записи, что «решение» является и четко документированы и рекомендуется. Это даже делается нашими инструментами. Это была простая ошибка пользователя, и такой вопрос был закрыт. –