R CMD检查注释:未发现任何调用:'R_registerRoutines','R_useDynamicSymbols'

如何避免以下注意出现在R CMD check中的新R开发版本(R正在开发(unstable)(2017-02-15 r72179))?

 • checking for unstated dependencies in examples ... OK • checking line endings in C/C++/Fortran sources/headers ... OK • checking compiled code ... NOTE File 'pkgname/libs/pkgname.so': Found no calls to: 'R_registerRoutines', 'R_useDynamicSymbols' It is good practice to register native routines and to disable symbol search. 

例如在Hmisc中

这个消息有点神秘。 我在其他软件包中查看了一下,发现NAMESPACE文件中的useDynLib(packagename)useDynLib(packagename, .registration = TRUE)所取代。

另外,我在src/目录中添加了一个名为registerDynamicSymbol.c文件,其代码如下:

 // RegisteringDynamic Symbols #include <Rh> #include <Rinternals.h> #include <R_ext/Rdynload.h> void R_init_markovchain(DllInfo* info) { R_registerRoutines(info, NULL, NULL, NULL, NULL); R_useDynamicSymbols(info, TRUE); } 

我从GitHub Rcpp那里得到了这个build议。 规范参考在写作R扩展

另外R Devel邮件列表提供了补充信息。

UPDATE

最直接的方法是:

  1. 使用目前的R开发版本(最终将变成3.4)
  2. 运行tools::package_native_routine_registration_skeleton(".") ,将完整的输出复制并粘贴到一个packagename_init.c文件中,放入src/
  3. 更新NAMESPACE ,validationuseDynLib(packagename, .registration = TRUE)
  4. 如有必要,将exportPatternreplace为export( list of object to be exported )

7月18日更新

正如@Symbolix使用最新版本的R和RStudio的devtools所指出的,第2点(init.c文件)似乎由devtools(使用RStudio校验数字)或工具包处理。

我遇到了一个Windows构build包的持久性问题。 (.dll而不是.so)

上面接受的答案也应该解决这个问题的Windows,但如果它不能解决它。 确保objdump.exe指向适当的拱形。 即.../Mingw_64/bin/objdump.exe 。 这可以从which objdump.exe的命令提示符处进行检查。 不知怎的,一个32位的objdump.exe在我的path中find了一个更高优先级的位置。 这种拱形不匹配会产生File format not recognized错误。