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
最直接的方法是:
- 使用目前的R开发版本(最终将变成3.4)
- 运行
tools::package_native_routine_registration_skeleton(".")
,将完整的输出复制并粘贴到一个packagename_init.c
文件中,放入src/
- 更新
NAMESPACE
,validationuseDynLib(packagename, .registration = TRUE)
- 如有必要,将
exportPattern
replace为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
错误。