2011-08-05 4 views
6

"Rh"と "Rmath.h"はR.appとCの間のインタフェースのヘッダファイルですが、Rコマンド 'R CMD SHLIB something.c 'ネイティブCプログラムのRhとRmath.h

ネイティブCプログラムをコンパイルしてgccを使用してコンパイルしたいとします。私はSnow Leopardを使用していますが、私はそれらのヘッダファイルを見つけることができません!

助けが必要ですか?

答えて

6

詳細については、「Writing R Extensions」のマニュアルを参照してください。Rmath.hとスタンドアロンのR Mathライブラリをコンパイルしてリンクすることは簡単です。 (これはRcpp/RInsideで使用できますが、別の話です)

libRmathを使用するためにいくつかの例が浮かびます。一つはマニュアルにあります。 -Iを追加して、私は、パッケージ内の標準の場所にライブラリやヘッダを置くとあなたは、単に(このように構築

/* copyright header omitted here for brevity */ 

#define MATHLIB_STANDALONE 1 
#include <Rmath.h> 

#include <stdio.h> 
typedef enum { 
    BUGGY_KINDERMAN_RAMAGE, 
    AHRENS_DIETER, 
    BOX_MULLER, 
    USER_NORM, 
    INVERSION, 
    KINDERMAN_RAMAGE 
} N01type; 

int 
main(int argc, char** argv) 
{ 
/* something to force the library to be included */ 
    qnorm(0.7, 0.0, 1.0, 0, 0); 
    printf("*** loaded '%s'\n", argv[0]); 
    set_seed(123, 456); 
    N01_kind = AHRENS_DIETER; 
    printf("one normal %f\n", norm_rand()); 
    set_seed(123, 456); 
    N01_kind = BOX_MULLER; 
    printf("normal via BM %f\n", norm_rand()); 

    return 0; 
} 

およびLinux上:ここで私は、このスタンドアロン数学ライブラリを含むDebianパッケージr-mathlibで出荷ですOS Xで必要に応じて-L)

/tmp $ cp -vax /usr/share/doc/r-mathlib/examples/test.c mathlibtest.c 
`/usr/share/doc/r-mathlib/examples/test.c' -> `mathlibtest.c' 
/tmp $ gcc -o mathlibtest mathlibtest.c -lRmath -lm 
/tmp $ ./mathlibtest 
*** loaded '/tmp/mathlibtest' 
one normal 1.119638 
normal via BM -1.734578 
/tmp $ 
+0

ありがとうございます。私はPDF「Writing R extensions」を読み始めました。 –

+0

私はこれを探していました。 r-mathlibやr-baseがインストールされていないマシンでも、プログラムをコンパイルすることは可能ですか? –

+0

私はテストプログラムを再構築して 'ldd'を実行する必要がありますが、r-mathlibの全体的なポイントはrベースに依存しないと思います。これらはダイナミックライブラリであり、他のシステムではまだr-mathlib(そして必要なもの)が必要です。すべての静的ビルドを初期構成から外さない限り、 –

関連する問題