Компиляция расширения R с помощью сторонней DLL - PullRequest
1 голос
/ 04 января 2011

Я пишу расширение R, которое включает в себя код C, основанный на сторонних DLL.Компиляция выполняется в Windows с использованием Rtools с R 2.11.0.Мой план состоит в том, что DLL будет распространяться вместе с исходным пакетом и храниться в каталоге src расширения.Мой вопрос тогда заключается в том, как я могу заставить компилятор искать в каталоге src, когда он пытается связаться со сторонней DLL.

В настоящее время я собираю пакет с помощью команды:

R CMD build --binary MyPackage

У меня также есть файл src / Makevars со следующей строкой:

PKG_LIBS = -ldlxapi32

Это гарантирует, что сторонняя DLL, dlxapi32.dll, будет включена в компиляцию.Однако компилятор не может найти DLL, так как каталог src моего пакета не является частью стандартного пути поиска библиотеки.

Я попытался исправить это, изменив src / Makevars следующим образом:

PKG_LIBS = -L$(CURDIR) -ldlxapi32

Но это не с выходом, подобным следующему:

gcc -shared -s -static-libgcc -o MyPackage.dll tmp.def dlx.o -L/cygdrive/c/DOCUME~1/abiel/LOCALS~1/Temp/Rbuild709236257/MyPackage/src -ldlxapi32 -Lc:/PROGRA~1/R/R-211~1.0/bin -lR
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot find -ldlxapi32

Здесь мы можем видеть, что $ (CURDIR) вычисляется как /cygdrive/c.DOCUME~1 / ... Я надеялся, что вместоон будет оцениваться в C: / Programming / r / MyPackage / src, который является фактическим местоположением каталога src.Есть ли способ это исправить?

1 Ответ

2 голосов
/ 04 января 2011

Вместо слишком сложного -L$(CURDIR), почему бы вам просто не использовать эквивалент -L.?

Кроме того, пакет Rtools использует MinGW, который не является Cygwin, поэтому я бы избегал путей типа /cygdrive / c / ... что касается MinGW, то это по-прежнему c: /....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...