Cro*_*ops 44 r compilation devtools
如何避免以下R CMD check使用新R开发版本出现的注意事项(R Under development(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.
Run Code Online (Sandbox Code Playgroud)
例如在Hmisc中
Gio*_*ato 37
这个消息有些神秘.我在其他包中也环顾四周,发现useDynLib(packagename)NAMESPACE文件中的内容被替换为useDynLib(packagename, .registration = TRUE).
另外,我添加了一个.c文件,registerDynamicSymbol在src/目录中用以下代码命名:
// RegisteringDynamic Symbols
#include <R.h>
#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);
}
Run Code Online (Sandbox Code Playgroud)
我从GitHub Rcpp那里得到了这个建议.规范性引用在Writing R Extensions中
此外,R Devel Mailinglist还提供了补充信息.
UPDATE
最直接的直接方法是:
tools::package_native_routine_registration_skeleton(".")并复制并将完整输出粘贴packagename_init.c到要放入的文件中src/NAMESPACE,验证useDynLib(packagename, .registration = TRUE)exportPattern以export( list of object to be exported )7月18日更新
正如@Symbolix使用最新版本的R和RStudio的devtools所指出的那样,第2点(init.c文件)似乎由devtools(使用RStudio校验位)或工具包处理.
小智 5
我遇到了Windows构建包的持久性问题.(.dll而不是.so)
上面接受的答案也应解决Windows的这个问题,但如果它没有解决它.确保objdump.exe指向适当的拱门.即.../Mingw_64/bin/objdump.exe.可以使用命令提示符检查which objdump.exe.不知何故,32位objdump.exe在我的路径中找到了更高优先级的位置.此拱不匹配将产生File format not recognized错误.