Impossible de compiler RcppArmadillo
RcppArmadillo est une dépendance de quelques packages que j'essaie d'installer. J'obtiens cette erreur lors de la compilation de RcppArmadillo version 0.10.1.0.0 (qui est ce que R tire automatiquement de CRAN quand il trouve que RcppArmadillo est un dep):
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
Ceci est construit à l'intérieur d'un conteneur Singuarity dans R 3.6.0 et avec GCC 4.8.5 sur CentOS 7. Je peux installer la version 0.9.900.3.0 de RcppArmadillo avec la commande "install_version" de devtools ( et cette version a complètement fonctionnait bien avant avec les mêmes autres packages, c'est pourquoi c'est celui que j'essaie d'installer), cependant, R le met immédiatement à jour vers la version 0.10.1.0.0 chaque fois qu'un autre paquet que j'installe a besoin de RcppArmadillo en tant que dépendance, ce qui provoque alors l'erreur ci-dessus et l'échec de ma construction. Je n'ai pas été en mesure de trouver un moyen d'empêcher R de faire cela sans lui dire simplement de ne pas installer de dépendances pour certains paquets, mais cela pose des maux de tête et je voulais voir s'il y avait une solution plus simple ici. Est-ce que quelqu'un sait comment corriger cette erreur de compilation ou comment empêcher R de mettre à jour automatiquement le package lors de l'installation d'un autre package qui en a besoin?
Voici la partie de la sortie montrant la mise à jour qui se produit juste après l'installation de la version 0.9.900.3.0 de RcppArmadillo:
* 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'
Réponses
Cela a déjà été discuté à quelques reprises dans le référentiel GitHub, dans la liste de diffusion ou ici.
Votre pari le plus simple est de choisir une version mise à jour via
install.packages("RcppArmadillo", repos="https://rcppcore.github.io/drat")
Comme cela n'affecte aucun des systèmes que CRAN (ou la plupart des utilisateurs) déploient, cela ne vaut probablement pas un nouveau téléchargement (et tous les tracas associés). Vous voudrez peut-être envisager de passer de CentOS 7 si vous avez le choix à cet égard.