Здесь это работает (и, пожалуйста, не обращайте внимания на то, что мой ~/.R/Makevars
выбирает определенные CC
и CFLAGS
; а также игнорируйте незначительные пробельные изменения):
edd@max:/tmp$ R CMD SHLIB foo.c
gcc-4.5 -I/usr/share/R/include -fpic -O3 -g0 -Wall -pipe -pedantic -std=gnu99 \
-c foo.c -o foo.o
gcc -shared -o foo.so foo.o -L/usr/lib64/R/lib -lR
edd@max:/tmp$ cat foo.c
#include <stdio.h>
#include <R.h>
#include <R_ext/BLAS.h>
void foo(int *dimension, double *vect1, double *vect2)
{
const int dim = dimension[0];
const int incxy = 1;
//swaps two vectors
F77_NAME(dswap)(&dim,vect1,&incxy,vect2,&incxy);
}
edd@max:/tmp$
Ubuntu 10.10, стоковые пакеты для R, gcc и т. д. Может быть, ваш R локально встроен в конфигурацию статической библиотеки?