используйте dyn.load или library.dynam для вызова функции C ++ в пакете R - PullRequest
3 голосов
/ 06 мая 2011

Я очень плохо знаком с R. Я хотел бы создать пакет R, который будет вызывать функцию C ++, используя .Call ().У меня есть файл NAMESPACE с

useDynLib(mypkg)

, где mypkg также является именем функции моего кода на c ++.

Это работает, если я использую эту строку в начале файла mypkg.R:

dyn.load("src/mypkg.so")

, но вместо этого я хочу использовать library.dynam, поэтому в файле zzz.R я помещаю

.onLoad<-function(libname, pkgname)
 {
 library.dynam("mypkg", pkgname, libname)
 }

. При проверке пакета выдается ошибка:

...
Error in .Call("mypkg", PACKAGE = "mypkg") : 
C symbol name "mypkg" not in DLL for package "mypkg".
Error : unable to load R code in package 'mypkg'
...

Похоже, файл * .so сгенерирован не в том месте?Почему не создается папка / libs?

Я бы хотел сделать пакет независимым от ОС, есть ли способ сделать это с помощью dyn.load?

И это может быть очень глупый вопрос, откуда взялись pkgname и libname?получить их вклад от?

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 мая 2011

Вы могли бы взглянуть на один из множества существующих пакетов (с скомпилированным исходным кодом) на CRAN .

Меньше и проще, проще взяться, поэтому вы можете например посмотрите на digest , который использует NAMESPACE для загрузки одной совместно используемой библиотеки, созданной из нескольких исходных файлов C, и использует .Call() для доступа к главной точке входа.

И затемтам, конечно, руководство ...

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