2013-04-13 11 views
8

Chcę utworzyć bibliotekę dll dynamiczne z kodu źródłowego C, dzięki czemu można ładować i używać go w R. Jestem teraz używającTworzenie dll dynamiczne biblioteki z C w R (Windows)

R CMD SHLIB foo.c 

w wierszu poleceń systemu Windows 7. Ale nic się nie stało. Nie ma komunikatu o błędzie, ale nie utworzono pliku dll.

Co jest nie tak z tym, co zrobiłem? Dziękuję Ci.

Odpowiedz

7

Przykro mi, jeśli moje pytanie nie jest bardzo jasne. Ale wymyśliłem, jak sprawić, żeby wszystko działało i możliwe błędy. Mam nadzieję, że będzie to przydatne dla kogoś. Oto kroki:

  1. Zainstaluj R (najnowsza wersja to 3.0.0). Upewnij się, że dodano folder R bin do PATH
  2. Zainstaluj najnowszą wersję Rtools Here. Pamiętaj, aby dodać "c: \ Rtools \ bin; c: \ Rtools \ gcc-4.6.3 \ bin;" PATH
  3. Wpisz swój kod C, zapisaną w foo.c
  4. W oknie polecenia systemu Windows, wpisz

    R CMD SHLIB foo.c

następnie trzeba mieć foo.dll plik można nazwać w R. Zauważ, że foo.dll utworzony w 64bits R może być ładowany tylko do 64bits R. Jeśli spróbujesz załadować w 32bits R, dostaniesz komunikaty o błędach.

+0

Możesz również wypróbować: [TDM-GCC] (http://tdm-gcc.tdragon.net/), [Cygwin] (https://www.cygwin.com/), [msysGit] (https: //msysgit.github.io/) (tylko netinstall), ale Rtools działa lepiej! – DenisKolodin

2

Dokładnie, co masz na myśli mówiąc "nic się nie stało"? Czy R jest na twojej drodze?

Co ujawnia się R --version? Co powiesz na R CMD config CC i R CMD config CFLAGS?

Wreszcie, jeśli nie RCPP zainstalowany (a toolchain był poprawny, w tym ustawienia ścieżki i cała reszta) można robić rzeczy w locie a la

R> library(Rcpp) 
R> cppFunction('double foo(double x) { return std::sqrt(x); }') 
R> foo(4) 
[1] 2 
R> foo(4.2) 
[1] 2.04939 
R> unclass(foo) 
function (x) 
.Primitive(".Call")(<pointer: 0x7f251ba76530>, x) 
R> 

Tutaj użyliśmy cppFunction() (a kilka sztuczek wewnątrz Rcpp), aby skompilować, połączyć i załadować prostą (i całkiem bezużyteczną ...) funkcję C (++), która zajmuje pierwiastek kwadratowy.

Powiązane problemy