Как правильно использовать useDynLib() в файле пространства имен пакета R
Хотя в Интернете существует несколько решений, я не нашел ни одного из подходящих для решения проблемы, с которой я сейчас сталкиваюсь (хотя, может быть, я просто слишком туп):
Я пытаюсь создать пакет R, который широко использует общий объект, скомпилированный Makefile (да, я знаю, что это плохая практика, но нельзя сказать, что файл Makevars нельзя скомпилировать код C и Fortran в один общий объект)) из кода в пакете src
каталог. Неважно, где я собираю это. Так, чтобы (я попробовал src
, libs
и базовые папки пакета) или как я называю его (как одно из решений, упомянутых выше, утверждает, что оно должно называться так же, как пакет, в котором оно содержится), R CMD check
выход с
** testing if installed package can be loaded
Error in library.dynam(lib, package, package.lib) :
shared object ‘SoMNibEN.R.so’ not found
из-за useDynLib(SoMNibEN.R)
инструкция в моем файле NAMESPACE (где SoMNibEN.R
это имя моего пакета, но оно не работало с оригинальным именем)
Я предполагаю, что я использую это useDynLib()
неверная команда или я делаю что-то не так с моим Makefile (хотя компиляция работает довольно хорошо и общий объект создается в папке моего проекта - я просто не знаю, успешно ли он был скопирован в каталог установки пакета).
Так что, если кто-нибудь знает, что я могу здесь делать неправильно, пожалуйста, дайте мне знать!
1 ответ
Вы хотите имя пакета в качестве аргумента, так как это имя общего объекта, созданного R, например useDynLib("chron")
, Цитаты не являются обязательными (как они для library()
так далее).
Я также рекомендую не использовать Makefile, а просто удалить файлы C и Fortran в src/
каталог. R обычно достаточно умен, чтобы знать, что делать. Если тебе надо -I
и т.д. переключатели вы можете установить их там.
Наконец, используйте CRAN. Существуют сотни пакетов с скомпилированными исходниками, и некоторые из них обязательно будут похожи по структуре на ваш вопрос.