首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当从终端而不是rstudio-server运行R时,使用RcppArmadillo的代码会进行编译

当从终端而不是rstudio-server运行R时,使用RcppArmadillo的代码会进行编译
EN

Stack Overflow用户
提问于 2017-05-01 05:50:49
回答 1查看 393关注 0票数 0

我正在尝试使用sourceCpp和RcppArmadillo编译一些c++代码。我在Ubuntu上使用的是R 3.3.3,Rcpp是0.12.10,RcppArmadillo是0.7.800.2.0。文件armatest.cpp被完全剥离。

代码语言:javascript
复制
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>

using namespace arma; 
using namespace Rcpp;

int one() {
  return 1;
}

当我试图在Rstudio服务器中编译这个代码时,我得到了以下编译错误:

代码语言:javascript
复制
> 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-server之外)运行R并重试时,它编译得很好。

代码语言:javascript
复制
>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的。

EN

回答 1

Stack Overflow用户

发布于 2017-05-01 07:07:22

可能是您的设置的本地设置,因为它在这里工作得很好,也来自RStudio-但请注意,我确实添加了一个// [[Rcpp::export]]以及一个自动执行的示例:

代码语言:javascript
复制
> Rcpp::sourceCpp("/tmp/armaQ.cpp")

> one()
[1] 1
> 

您的示例,经过最小程度的修改:

代码语言:javascript
复制
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>

using namespace arma; 
using namespace Rcpp;

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

/*** R
one()
*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43711710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档