RcppArmadillo derlenemiyor

Nov 03 2020

RcppArmadillo, kurmaya çalıştığım birkaç paketin bağımlılığıdır. Bu hatayı RcppArmadillo 0.10.1.0.0 sürümünün derlenmesinde alıyorum (bu, RcppArmadillo'nun bir dep olduğunu bulduğunda R'nin CRAN'dan otomatik olarak aldığı şeydir):

RcppArmadillo.cpp:26:40: error: redeclaration 'arma::arma_version::major' differs in 'constexpr'
 const unsigned int arma::arma_version::major;
                                        ^
In file included from ../inst/include/armadillo:91:0,
                 from ../inst/include/RcppArmadilloForward.h:49,
                 from ../inst/include/RcppArmadillo.h:31,
                 from RcppArmadillo.cpp:22:
../inst/include/armadillo_bits/arma_version.hpp:31:33: error: from previous declaration 'arma::arma_version::major'
   static constexpr unsigned int major = ARMA_VERSION_MAJOR;
                                 ^
RcppArmadillo.cpp:26:40: error: declaration of 'constexpr const unsigned int arma::arma_version::major' outside of class is not definition [-fpermissive]
 const unsigned int arma::arma_version::major;
                                        ^
RcppArmadillo.cpp:27:40: error: redeclaration 'arma::arma_version::minor' differs in 'constexpr'
 const unsigned int arma::arma_version::minor;
                                        ^
In file included from ../inst/include/armadillo:91:0,
                 from ../inst/include/RcppArmadilloForward.h:49,
                 from ../inst/include/RcppArmadillo.h:31,
                 from RcppArmadillo.cpp:22:
../inst/include/armadillo_bits/arma_version.hpp:32:33: error: from previous declaration 'arma::arma_version::minor'
   static constexpr unsigned int minor = ARMA_VERSION_MINOR;
                                 ^
RcppArmadillo.cpp:27:40: error: declaration of 'constexpr const unsigned int arma::arma_version::minor' outside of class is not definition [-fpermissive]
 const unsigned int arma::arma_version::minor;
                                        ^
RcppArmadillo.cpp:28:40: error: redeclaration 'arma::arma_version::patch' differs in 'constexpr'
 const unsigned int arma::arma_version::patch;
                                        ^
In file included from ../inst/include/armadillo:91:0,
                 from ../inst/include/RcppArmadilloForward.h:49,
                 from ../inst/include/RcppArmadillo.h:31,
                 from RcppArmadillo.cpp:22:
../inst/include/armadillo_bits/arma_version.hpp:33:33: error: from previous declaration 'arma::arma_version::patch'
   static constexpr unsigned int patch = ARMA_VERSION_PATCH;
                                 ^
RcppArmadillo.cpp:28:40: error: declaration of 'constexpr const unsigned int arma::arma_version::patch' outside of class is not definition [-fpermissive]
 const unsigned int arma::arma_version::patch;
                                        ^
make: *** [RcppArmadillo.o] Error 1
make: *** Waiting for unfinished jobs....
ERROR: compilation failed for package 'RcppArmadillo'
* removing '/usr/local/lib64/R/library/RcppArmadillo'
* restoring previous '/usr/local/lib64/R/library/RcppArmadillo'
Error: Failed to install 'unknown package' from URL:
  (converted from warning) installation of package 'RcppArmadillo' had non-zero exit status
Execution halted
FATAL:   post proc: exit status 1
FATAL:   While performing build: while running engine: exit status 255

Bu, R 3.6.0'da bir Singuarity kapsayıcısının içinde ve CentOS 7'de GCC 4.8.5 ile oluşturulmuştur. Devtools'un "install_version" komutuyla RcppArmadillo fine 0.9.900.3.0 sürümünü yükleyebilirim ( ve bu sürümde tamamen daha önce aynı diğer paketlerle iyi çalıştı, bu yüzden yüklemeye çalıştığım), ancak, yüklediğim başka bir paket bağımlılık olarak RcppArmadillo'ya ihtiyaç duyduğunda R, onu hemen 0.10.1.0.0 sürümüne günceller, bu da yukarıdaki hataya ve yapımın başarısız olmasına neden olur. R'nin bu kadar kısa sürede yapmasını engellemenin bir yolunu bulamadım, sadece belirli paketler için bağımlılıklar yüklememesini söylemekten başka bir şey yapamadım, ancak bu baş ağrısına neden oluyor ve burada daha kolay bir çözüm olup olmadığını görmek istedim. Bu derleme hatasını nasıl düzelteceğini veya ihtiyaç duyan başka bir paket kurulduğunda R'nin paketi otomatik olarak güncellemesini nasıl engelleyeceğini bilen var mı?

İşte çıktının RcppArmadillo 0.9.900.3.0 sürümü başarıyla yüklendikten hemen sonra gerçekleşen güncellemeyi gösteren kısmı:

* DONE (RcppArmadillo)
Downloading package from url: https://ftp.osuosl.org/pub/cran/src/contrib/gratia_0.4.1.tar.gz
RcppArmad... (0.9.900.3.0 -> 0.10.1.0.0) [CRAN]
mvnfast      (NA          -> 0.2.5.1   ) [CRAN]
patchwork    (NA          -> 1.0.1     ) [CRAN]
Installing 3 packages: RcppArmadillo, mvnfast, patchwork
trying URL 'https://ftp.osuosl.org/pub/cran/src/contrib/RcppArmadillo_0.10.1.0.0.tar.gz'

Yanıtlar

4 DirkEddelbuettel Nov 03 2020 at 06:31

Bu daha önce GitHub deposunda veya posta listesinde veya burada birkaç kez tartışılmıştı.

En basit bahsiniz, güncel bir sürümü seçmek

install.packages("RcppArmadillo", repos="https://rcppcore.github.io/drat")

Bu, CRAN'ın (veya çoğu kullanıcının) yerleştirdiği hiçbir sistemi etkilemediği için, yeni bir yüklemeye (ve ilgili tüm zorluklara) değmeyebilir. Bu konuda bir seçeneğiniz varsa, CentOS 7'den devam etmeyi düşünebilirsiniz.