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

どちらの場合も英語の名詞「ライブラリ」を使用しているにもかかわらず、この 2 つは同じではありません。

プログラミング、コンパイラ、リンカなどに関するテキストで少しブラッシュアップする必要があるかもしれません...

于 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セッションからRcppを操作する必要があります。

于 2012-07-17T11:58:53.303 に答える