Быстрая установка: /usr/lib/R/etc/Makeconf:168: рецепт для цели 'Norm.o' не выполнен

Я пытаюсь установить пакет Rfast. Это дает мне следующую ошибку,

/usr/lib/R/etc/Makeconf:168: recipe for target 'Norm.o' failed
    make: *** [Norm.o] Error 1

Полное сообщение об ошибке это,

> install.packages("Rfast", dependencies = TRUE)

* installing *source* package 'Rfast' ...
** package 'Rfast' successfully unpacked and MD5 sums checked
** libs
g++ -std=gnu++11 -I/usr/share/R/include -DNDEBUG  -I"/home/haseeb/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/include" -I"/home/haseeb/R/x86_64-pc-linux-gnu-library/3.4/RcppArmadillo/include"   -fopenmp -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c Diag.cpp -o Diag.o
g++ -std=gnu++11 -I/usr/share/R/include -DNDEBUG  -I"/home/haseeb/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/include" -I"/home/haseeb/R/x86_64-pc-linux-gnu-library/3.4/RcppArmadillo/include"   -fopenmp -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c Norm.cpp -o Norm.o
In file included from Norm.cpp:4:0:
templates.h: In function 'SEXPREC* eachrow_helper(SEXP, SEXP)':
templates.h:904:15: error: there are no arguments to 'DATAPTR' that depend on a template parameter, so a declaration of 'DATAPTR' must be available [-fpermissive]
   T *xx=(T *) DATAPTR(x),*xend=xx+ncol*nrow,*yy=(T *) DATAPTR(y),yvalue,*x3;
               ^~~~~~~
templates.h:904:15: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
templates.h:904:55: error: there are no arguments to 'DATAPTR' that depend on a template parameter, so a declaration of 'DATAPTR' must be available [-fpermissive]
   T *xx=(T *) DATAPTR(x),*xend=xx+ncol*nrow,*yy=(T *) DATAPTR(y),yvalue,*x3;
                                                       ^~~~~~~
templates.h:905:32: error: there are no arguments to 'DATAPTR' that depend on a template parameter, so a declaration of 'DATAPTR' must be available [-fpermissive]
   RETURN_TYPE *m=(RETURN_TYPE*)DATAPTR(mat);
                                ^~~~~~~
/usr/lib/R/etc/Makeconf:168: recipe for target 'Norm.o' failed
make: *** [Norm.o] Error 1
ERROR: compilation failed for package 'Rfast'

Моя сессия информация выглядит следующим образом,

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.1 LTS

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=C                 LC_NUMERIC=C               LC_TIME=de_DE.UTF-8       
 [4] LC_COLLATE=C               LC_MONETARY=de_DE.UTF-8    LC_MESSAGES=C             
 [7] LC_PAPER=de_DE.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.4 tools_3.4.4    yaml_2.2.0 

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

2 ответа

Я считаю, что проблема в том, что я забыл добавить

#include <Rinlinedfuns.h>

но я не могу использовать этот файл. DATAPTR объявлен в этом файле.

Я получаю точно такую ​​же ошибку на своем настольном компьютере и ноутбуке под управлением Ubuntu 16.04 и затрудняюсь исправить это.

Мне кажется, что это плохая практика кодирования (использование функции DATAPTR(x) без предварительного объявления). Я попытался найти объявление для DATAPTR в заголовочных файлах, но ничего не было найдено.

DATAPTR(x) определяется в /usr/share/R/include/Rinternals.h, который явно не включен в Norm.cpp тогда как он включен в Diag.cpp Последний компилируется без ошибок.

Я не знаю, почему это компилируется на других машинах и не работает только на наших. Версия g++:

g++ (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.10) 5.4.0 20160609

Я ожидаю, если Rinternals.h явно не включается везде, где требуется DATAPTR, тогда он должен завершаться сбоем во всех установках, если только нет способа указать компилятору включить Rinternals.h по умолчанию?

Другие вопросы по тегам