R.h и Rmath.h в родной C-программе - PullRequest
6 голосов
/ 05 августа 2011

«Rh» и «Rmath.h» являются заголовочными файлами для интерфейса между R.app и C. Но, кажется, они могут быть прочитаны только с помощью команды R 'R CMD SHLIB что-то.c'

Я хочу скомпилировать мою родную программу на C, чтобы включить их, используя gcc.Я использую Snow Leopard, где я не могу найти эти заголовочные файлы!

Любая помощь?

1 Ответ

6 голосов
/ 05 августа 2011

Пожалуйста, обратитесь к руководству '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 $ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...