如何将`library(RgoogleMaps)`放在Rcpp的代码中?

时间:2012-07-17 11:42:41

标签: linux r rcpp

#include "rtest.h"
#include <iostream>

SEXP rcpp_hello_world ()
{
    using namespace Rcpp ;
    CharacterVector x = CharacterVector::create( "foo", "bar" );
    NumericVector y   = NumericVector::create( 0.0, 1.0 );
    List z                   = List::create (x, y);

    return z;
}

void funcA ()
{
    std :: cout << "\nsdfsdfsdf\n";
}

int main () {return 0;}

如何摆放 library(RgoogleMaps)

png (filename="Rg.png", width=480, height=480)
在上面的代码里面?

我将其运行为:R CMD SHLIB rtest.cpp

> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
> 

Rcpp的版本为0.9.13

我试过了:
R CMD SHLIB -lRgoogleMaps rtest.cpp

结果是:

anisha@linux-y3pi:~/> R CMD SHLIB -lRgoogleMaps rtest.cpp

g++ -I/usr/lib64/R/include -DNDEBUG  -I/usr/local/include   -I/usr/lib64/R/library/Rcpp/include -fpic  -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables  -c rtest.cpp -o rtest.o
g++ -shared -L/usr/local/lib64 -o rtest.so rtest.o -lRgoogleMaps -L/usr/lib64/R/lib -lR
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lRgoogleMaps
collect2: ld returned 1 exit status
make: *** [rtest.so] Error 1

2 个答案:

答案 0 :(得分:5)

我认为你在

之间存在一些概念问题
 library(RgoogleMaps)
R中的

,以及编译器的库是什么

 -lfoo -Lpath/to/library

尽管我们在两种情况下都使用英文名词“library”,但两者并不相同。

您可能需要在编程,编译器,链接器等文本上刷一点......

答案 1 :(得分:3)

你为什么要这样做? Rcpp 旨在用于在R会话中连接C ++代码,以便您可以利用更快的计算或重用现有的C ++库。

编写一个调用Rcpp代码的R包装器,让该包装器安排使包可用(使用require(RgoogleMaps))。

其次,您不想对绘图设备进行硬编码。再一次,你可以在R:

中做到这一点
png(filename="Rg.png", width=480, height=480)
##
## call Rcpp function
## in here
dev.off()

Rcpp不是用于编写独立的C ++应用程序,您仍然希望从R会话中与它进行交互。