2011-08-05 6 views
6

"Rh" y "Rmath.h" son archivos de cabecera para una interfaz entre R.app y C. Pero, parecen ser legibles solo a través de un comando R 'R CMD SHLIB algo.c 'Rh y Rmath.h en el programa C nativo

Deseo compilar mi programa C nativo para incluirlos usando gcc. ¡Estoy usando Snow Leopard donde no puedo encontrar esos archivos de encabezado!

¿Algún ayuda?

Respuesta

6

Consulte el manual 'Grabando R Extensiones' sobre los detalles, puede compilar y vincular fácilmente contra Rmath.h y la biblioteca R Math independiente, pero no R.h. (Que puede usar a través de Rcpp/RInside pero esa es una historia diferente.)

Hay una serie de ejemplos flotando alrededor para usar libRmath, uno está en el manual mismo. Aquí está uno que envío en el paquete Debian r-mathlib que contiene esta biblioteca matemática independiente:

/* 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; 
} 

y en Linux sólo tiene que construir así (como coloco la biblioteca y encabezado en ubicaciones estándar en el paquete, añadir -I y -L según sea necesario en 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 $ 
+0

Gracias. Empecé a leer el PDF "Writing R extensions". –

+0

Estaba buscando esto. ¿Es posible compilar el programa "Me gusta" en una máquina que no tiene instalados r-mathlib o incluso r-base? –

+0

Tendría que reconstruir un programa de prueba y ejecutar 'ldd' en él, pero creo que el objetivo de r-mathlib es * no * depender de r-base. Siendo estas bibliotecas dinámicas, aún necesitarías r-mathlib (y lo que necesita) en el otro sistema. A menos que vaya a todas las compilaciones estáticas desde la configuración inicial, –

Cuestiones relacionadas