2017-02-18 27 views
39

如何避免以下注意出現在R CMD check與新的R開發版本(R開發中(不穩定)(2017-02-15 r72179))?R CMD檢查註釋:未發現任何呼叫:'R_registerRoutines','R_useDynamicSymbols'

• 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

回答

35

該消息是有點晦澀難懂。我在其他軟件包中環顧四周,發現NAMESPACE文件中的useDynLib(packagename)被替換爲useDynLib(packagename, .registration = TRUE)

另外,我加了一個.c文件,在src/目錄下面的代碼名爲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。規範性參考文獻在Writing R Extensions

另外R Devel Mailinglist提供了補充信息。

UPDATE

最直接簡單的方法是:

  1. 使用的當前R開發版本(這將最終成爲3.4)
  2. 運行tools::package_native_routine_registration_skeleton(".")複製並粘貼完整的輸出在要放入的packagename_init.c文件中src/
  3. 更新NAMESPACE,驗證useDynLib(packagename, .registration = TRUE)
  4. 如有必要,則更換exportPatternexport(list of object to be exported)

UPDATE 7月18日

正如@Symbolix使用R和最新版本RStudio的devtools點2(INIT.C注意文件)似乎由devtools(使用RStudio校驗位)或工具包處理。

+0

我在'devtools'包中使用'@useDynLib pkg fun'來註冊C函數。 [但似乎還有更多。](https://www.r-project.org/doc/Rnews/Rnews_2001-3.pdf#section*.51) – Crops

+1

我有同樣的問題 - 我用你的建議這就是結果:找不到調用:'R_registerRoutines' 這意味着它找到了R_useDynamicSymbols語句。但我現在想知道,爲什麼registerRoutines錯誤並沒有消失... – stats0007

+1

不應該是我正在做我的事實。使用funtionname而不是「functionName」而不使用package =「mypackage」的C調用表明,註冊實際上工作...? – stats0007

3

我遇到了Windows構建包的一個持久性問題。 (.dll而不是.so)

上面接受的答案也應該解決Windows的這個問題,但是如果它沒有解決它。確保objdump.exe指向適當的拱門。即.../Mingw_64/bin/objdump.exe。這可以通過命令提示符which objdump.exe進行檢查。不知怎的,一個32位的objdump.exe在我的路徑中找到了一個更高優先級的位置。這種拱形不匹配會產生一個File format not recognized錯誤。