2015-12-09 2 views
2

Я пытаюсь выяснить ошибку, которая помешала мне сделать 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

+0

Для записи, что «решение» является и четко документированы и рекомендуется. Это даже делается нашими инструментами. Это была простая ошибка пользователя, и такой вопрос был закрыт. –

ответ

3

Что такое операционная система?

Что делает R CMD config LAPACK_LIBS возвращение?

Вы построили R самостоятельно или вы загрузили двоичный файл?

В большинстве систем (Linux, OS X, ...) R будет использовать внешние библиотеки LAPACK. В Windows он может использовать собственную (уменьшенную) копию LAPACK, которая не обладает некоторой функциональностью.

Для чего это стоит, ваша программа строит просто отлично на моей системе с внешними библиотеками LAPACK:

R> sourceCpp("/tmp/arma_sym.cpp") 
R> v <- 1:4; getEigenValues(v %*% t(v)) 
      [,1] 
[1,] -2.33587e-15 
[2,] 0.00000e+00 
[3,] 2.33587e-15 
[4,] 3.00000e+01 
R> 
+0

Спасибо Дирк! извините, что я использую Windows. Я просто нашел способ решить эту проблему, сравнив файлы, созданные с вашего RcppArmadillo.package.skeleton(), и файлы из Rstudio. Пакет успешно создан путем добавления файла «Makevars.win» в папку src – user2961927

+0

. Тогда удалим вопрос. Ваш пакет был просто ошибочен. –

+1

ОК, поэтому под Windows, с Rstudio есть какой-либо способ, кроме «добавления файла Makervars.win» для сборки пакета RcppArmadillo? – user2961927

Смежные вопросы