R CMD 检查说明:发现没有调用:'R_registerRoutines'、'R_useDynamicSymbols'

R CMD check note: Found no calls to: ‘R_registerRoutines’, ‘R_useDynamicSymbols’

如何避免新的 R 开发版本 R CMD check 中出现以下注意事项( 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.

例如 Hmisc

该消息有些神秘。我也查看了其他包,发现 NAMESPACE 文件中的 useDynLib(packagename)useDynLib(packagename, .registration = TRUE) 替换了。

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

// 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);
}

我从 GitHub Rcpp. The canonical reference is in Writing R Extensions

中采纳了这个建议

R Devel Mailinglist提供了补充信息。

更新

最直接直接的做法是:

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

7 月 18 日更新

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

我 运行 遇到了 Windows 构建包的持续性问题。 (.dll 而不是 .so)

上面接受的答案也应该解决 Windows 的这个问题,但如果它没有解决它。确保 objdump.exe 指向适当的拱门。即 .../Mingw_64/bin/objdump.exe。这可以在命令提示符下使用 which objdump.exe 检查。不知何故,32 位 objdump.exe 在我的路径中找到了更高优先级的位置。这种拱门不匹配会产生 File format not recognized 错误。

首先我完全按照 Giorgio Spedicato 所说的去做。但仍然收到注意警告。最后我通过这样做解决了问题:

Sys.setenv(路径=粘贴(Sys.getenv("路径"), "C:\RTools40", "C:\RTools40\mingw64\bin", sep = ";"))

必须将 mingw64\bin 添加到 PATH,因为那是 objdump.exe 所在的位置