Я пытаюсь создать 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. Пожалуйста, дайте мне знать, если я должен сделать последний бит отдельным вопросом.