6
「Rh」和「Rmath.h」是R.app和C之間接口的頭文件。但是,它們似乎只能通過R命令'R CMD SHLIB something.c'本地C程序中的Rh和Rmath.h
我希望編譯我的本地C程序,以使用gcc包含它們。我使用雪豹,我無法找到這些頭文件!
任何幫助?
「Rh」和「Rmath.h」是R.app和C之間接口的頭文件。但是,它們似乎只能通過R命令'R CMD SHLIB something.c'本地C程序中的Rh和Rmath.h
我希望編譯我的本地C程序,以使用gcc包含它們。我使用雪豹,我無法找到這些頭文件!
任何幫助?
有關詳細信息,請參閱'Writing R Extensions'手冊,您可以輕鬆地編譯並鏈接Rmath.h和獨立的R Math數據庫 - 但不是R.h. (你可以通過Rcpp/RInside使用,但這是一個不同的故事。)
有許多例子可以在libRmath中使用,其中一個例子在手冊本身。這是一個我船在含有這種獨立的數學庫的Debian軟件包r-mathlib
:
/* 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上您只需建立這樣的(因爲我在放在包中的標準位置的庫和頭;加上-I和-L在OS X上需要)
/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-base。這些是dyanmic庫,你仍然需要在其他系統上使用r-mathlib(以及它需要的)。除非你從最初的配置中完成所有的靜態構建, –