#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
答案 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会话中与它进行交互。