Я пытаюсь создать R-пакет, который использует некоторый C-код. У меня есть библиотека C, которая скомпилирована в исполняемый файл, который можно вызвать из командной строки. С ним связан файл Makefile.
Я пытаюсь получить информацию здесь, где говорится
Если вы хотите создать и затем подключиться к библиотеке, скажем, используя код в подкаталог, используйте что-то вроде
.PHONY: all mylibs
all: $(SHLIB)
$(SHLIB): mylibs
mylibs:
(cd subdir; make)
Будьте осторожны, чтобы создать все необходимые зависимости, так как нет гарантировать, что зависимости всех будет выполняться в определенном порядке (и некоторые из машин сборки CRAN использование нескольких процессоров и параллельных операций).
Если я создаю новый подкаталог папки src
в моем пакете, называемый someLibrary
, с кодом и Makefile без изменений и, в свою очередь, в исходном файле Makevars
для моего пакета, я добавлю код выше без изменений, то я смогу построить эту общую библиотеку для экспорта с помощью useDynLib
?
Изменить 1:
Следующая информация здесь, я изменил Makefile
, чтобы создать общую библиотеку, добавив
CFLAG = -fPIC -g -O3
LDFLAGS= -shared
Однако это приводит к тому, что файл .so
не экспортируется непосредственно в каталог libs
пакета. Если я жестко закодирую путь в целевой, то файл отправляется в каталог libs
пакета (все это путем вызова R CMD INSTALL myPackage
).
Изменить 2:
Наконец, я хотел бы знать, как делать вызовы в общей библиотеке, учитывая, что у него есть метод main()
, который я мог бы вызвать из исполняемого файла командной строки.
Какова процедура, чтобы разоблачить это для R NAMESPACE
, чтобы его можно было вызвать через .Call
?
PS. Пожалуйста, дайте мне знать, если я должен сделать последний бит отдельным вопросом.