2017-04-30 1 views
0

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.

Antwort

0

wahrscheinlich etwas lokal zu Ihrem Setup, da es in Ordnung hier auch von RStudio arbeitet --- aber beachten Sie, dass ich ein // [[Rcpp::export]] sowie ein Auto-Ausführung Beispiel hinzugefügt habe:

> Rcpp::sourceCpp("/tmp/armaQ.cpp") 

> one() 
[1] 1 
> 

Ihr Beispiel minimal verändert :

// [[Rcpp::depends(RcppArmadillo)]] 
#include <RcppArmadillo.h> 

using namespace arma; 
using namespace Rcpp; 

// [[Rcpp::export]] 
int one() { 
    return 1; 
} 

/*** R 
one() 
*/ 
Verwandte Themen