0
#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
4

2 回答 2

5

我认为你在什么之间有一点概念上的问题

 library(RgoogleMaps)

在 R 中做了什么,以及库对于编译器来说是什么

 -lfoo -Lpath/to/library

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

您可能需要稍微复习一下有关编程、编译器、链接器等方面的内容...

于 2012-07-17T11:57:30.940 回答
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 会话与它进行交互。

于 2012-07-17T11:58:53.303 回答