Ich versuche, einige C++ Code zum kompilieren mit SourceCpp und RcppArmadillo zu bekommen. Ich benutze R 3.3.3 auf Ubuntu, Rcpp 0.12.10 und RcppArmadillo 0.7.800.2.0. Die Datei armatest.cpp ist komplett entkleidet.Code mit RcppArmadillo Compiles beim Ausführen von R von Terminal, aber nicht auf dem ersten Server
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace arma;
using namespace Rcpp;
int one() {
return 1;
}
Wenn ich versuche, dies zu kompilieren aus Rstudio Server, erhalte ich die folgenden Kompilierungsfehler:
> Rcpp::sourceCpp("armatest.cpp", verbose = TRUE, rebuild=TRUE)
Generated extern "C" functions
--------------------------------------------------------
#include <Rcpp.h>
Generated R functions
-------------------------------------------------------
`.sourceCpp_1_DLLInfo` <- dyn.load('/tmp/Rtmp3oSZra/sourceCpp-x86_64-pc-linux-gnu-0.12.10/sourcecpp_47d41ae4918/sourceCpp_10.so')
rm(`.sourceCpp_1_DLLInfo`)
Building shared library
--------------------------------------------------------
DIR: /tmp/Rtmp3oSZra/sourceCpp-x86_64-pc-linux-gnu-0.12.10/sourcecpp_47d41ae4918
/usr/lib/R/bin/R CMD SHLIB -o 'sourceCpp_10.so' --preclean 'armatest.cpp'
g++ -I/usr/share/R/include -DNDEBUG -I"/home/amercer/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/include" -I"/home/amercer/R/x86_64-pc-linux-gnu-library/3.3/RcppArmadillo/include" -I"/home/amercer" -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c armatest.cpp -o armatest.o
g++ -shared -L/usr/lib/R/lib -Wl,-z,relro -o sourceCpp_10.so armatest.o -llapack -lblas -lgfortran -lm -lquadmath -L/usr/lib/R/lib -lR
/usr/share/R/share/make/shlib.mk:6: recipe for target 'sourceCpp_10.so' failed
Error in Rcpp::sourceCpp("armatest.cpp", verbose = TRUE, rebuild = TRUE) :
Error 1 occurred building shared library.
Allerdings, wenn ich laufe R von der Kommandozeile (außerhalb von Rstudio-Server), und versuche es erneut, es kompiliert einfach gut.
>Rcpp::sourceCpp("armatest.cpp", verbose = TRUE, rebuild=TRUE)
Generated extern "C" functions
--------------------------------------------------------
#include <Rcpp.h>
Generated R functions
-------------------------------------------------------
`.sourceCpp_1_DLLInfo` <- dyn.load('/tmp/RtmptRileh/sourceCpp-x86_64-pc-linux-gnu-0.12.10/sourcecpp_1966315b9edd0/sourceCpp_4.so')
rm(`.sourceCpp_1_DLLInfo`)
Building shared library
--------------------------------------------------------
DIR: /tmp/RtmptRileh/sourceCpp-x86_64-pc-linux-gnu-0.12.10/sourcecpp_1966315b9edd0
/usr/lib/R/bin/R CMD SHLIB -o 'sourceCpp_4.so' --preclean 'armatest.cpp'
g++ -I/usr/share/R/include -DNDEBUG -I"/home/amercer/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/include" -I"/home/amercer/R/x86_64-pc-linux-gnu-library/3.3/RcppArmadillo/include" -I"/home/amercer" -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c armatest.cpp -o armatest.o
g++ -shared -L/usr/lib/R/lib -Wl,-z,relro -o sourceCpp_4.so armatest.o -llapack -lblas -lgfortran -lm -lquadmath -L/usr/lib/R/lib -lR
Warning message:
In Rcpp::sourceCpp("armatest.cpp", verbose = TRUE, rebuild = TRUE) :
No Rcpp::export attributes or RCPP_MODULE declarations found in source
Soweit ich das beurteilen kann, führen sie genau die gleichen Befehle mit den gleichen Flags aus. Was erklärt den Unterschied? Rcpp alleine funktioniert gut für mich in Rstudio-Server, also ist es etwas speziell mit RcppAarmadillo.