2017-04-30 4 views
0

sourceCppとRcppArmadilloを使用してコンパイルするためのC++コードを取得しようとしています。私はUbuntuでR 3.3.3、Rcpp 0.12.10とRcppArmadillo 0.7.800.2.0を使用しています。ファイルarmatest.cppは完全に削除されています。私はRstudioサーバ内からこれをコンパイルしようとすると、私は次のコンパイルエラーが発生しますRcppArmadilloを使用しているコードは、端末からRを実行するとコンパイルされますが、rstudio-serverはありません

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

using namespace arma; 
using namespace Rcpp; 

int one() { 
    return 1; 
} 

:しかし

> 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

そうなセットアップにローカルなもの、それはRStudioからも、ここで正常に動作として---私は// [[Rcpp::export]]だけでなく、自動実行例追加しましたのでご注意:最小限に変更され、

> 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() 
*/ 
関連する問題