2017-04-30 8 views
0

sourceCpp와 RcppArmadillo를 사용하여 컴파일 할 C++ 코드를 얻으려고합니다. 우분투에서 R 3.3.3, Rcpp 0.12.10 및 RcppArmadillo 0.7.800.2.0을 사용하고 있습니다. armatest.cpp 파일은 완전히 제거되었습니다.RcppArmadillo를 사용하는 코드가 터미널에서 R을 실행할 때 컴파일되지만 rstudio-server가 아닙니다.

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

using namespace arma; 
using namespace Rcpp; 

int one() { 
    return 1; 
} 

내가 Rstudio 서버 내에서이 컴파일을 시도 , 나는 다음과 같은 컴파일 오류가 발생합니다 :

그러나
> 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. 

, 내가 (Rstudio 서버의 외부) 명령 줄에서 R을 실행하면, 다시 시도해보십시오, 잘 컴파일됩니다.

>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 

내가 알 수있는 한, 그들은 같은 플래그로 정확하게 동일한 명령을 실행하고 있습니다. 차이점은 무엇입니까? Rcpp은 자체적으로 Rstudio-server에서 저에게 잘 작동합니다. 그래서 RcppAarmadillo에 관한 것입니다.

답변

0
은 당신의 설정에 지역

가능성이 뭔가 그것이 내가 자동 실행 예뿐만 아니라 // [[Rcpp::export]]를 추가 한 것을 RStudio에서 여기 잘 작동 ---하지만 참고로 :

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

> one() 
[1] 1 
> 

귀하의 예를, 최소한의 변경 :

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

using namespace arma; 
using namespace Rcpp; 

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

/*** R 
one() 
*/