6
"Rh"と "Rmath.h"はR.appとCの間のインタフェースのヘッダファイルですが、Rコマンド 'R CMD SHLIB something.c 'ネイティブCプログラムのRhとRmath.h
ネイティブCプログラムをコンパイルしてgccを使用してコンパイルしたいとします。私はSnow Leopardを使用していますが、私はそれらのヘッダファイルを見つけることができません!
助けが必要ですか?
"Rh"と "Rmath.h"はR.appとCの間のインタフェースのヘッダファイルですが、Rコマンド 'R CMD SHLIB something.c 'ネイティブCプログラムのRhとRmath.h
ネイティブCプログラムをコンパイルしてgccを使用してコンパイルしたいとします。私はSnow Leopardを使用していますが、私はそれらのヘッダファイルを見つけることができません!
助けが必要ですか?
詳細については、「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 $
ありがとうございます。私はPDF「Writing R extensions」を読み始めました。 –
私はこれを探していました。 r-mathlibやr-baseがインストールされていないマシンでも、プログラムをコンパイルすることは可能ですか? –
私はテストプログラムを再構築して 'ldd'を実行する必要がありますが、r-mathlibの全体的なポイントはrベースに依存しないと思います。これらはダイナミックライブラリであり、他のシステムではまだr-mathlib(そして必要なもの)が必要です。すべての静的ビルドを初期構成から外さない限り、 –