R CMD check note: Found no calls to: "r registerRoutines", "R useDynamicSymbols"

Jak uniknąć poniższej notatki, która pojawia się w R CMD check z nową wersją rozwojową 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.

Na przykład w Hmisc

Author: Crops, 2017-02-18

2 answers

Wiadomość jest nieco tajemnicza. Rozejrzaĺ 'em siÄ ™ rĂłwnieĹź w innych pakietach i stwierdziĺ' em, Ĺźe useDynLib(packagename) w pliku przestrzeni nazw zostaĹ ' a zamieniona na useDynLib(packagename, .registration = TRUE).

Dodatkowo dodałem plik .c o nazwie registerDynamicSymbol w katalogu src/ o następującym kodzie:

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

Wziąłem tę sugestię z GitHub Rcpp . Odsyłacz kanoniczny znajduje się w zapisując rozszerzenia R

Również R Devel Mailinglist pod warunkiem uzupełnienia infos.

UPDATE

Najbardziej bezpośrednie proste podejście to:

  1. Użyj bieżącej wersji rozwojowej R (która ostatecznie stanie się 3.4)
  2. Uruchom tools::package_native_routine_registration_skeleton(".") i skopiuj i wklej pełne wyjście do pliku packagename_init.c do umieszczenia w src/
  3. update NAMESPACE, sprawdzając, że useDynLib(packagename, .registration = TRUE)
  4. w razie potrzeby zastąp exportPattern przez export( list of object to be exported )

UPDATE 18th July

Jak zauważył @Symbolix przy użyciu najnowszego wersja R i RStudio ' s devtools the point 2. (init.pliki c) są obsługiwane przez devtools (przy użyciu cyfry kontrolnej RStudio) lub pakiety narzędzi.

 37
Author: Giorgio Spedicato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-18 20:12:30

Natknąłem się na trwały problem z pakietem Windows build. (.dll zamiast. so)

Przyjęta powyżej odpowiedź powinna również rozwiązać ten problem w systemie Windows, ale jeśli go nie rozwiąże. Upewnij się, że objdump.exe wskazuje odpowiedni łuk. tj. .../Mingw_64/bin/objdump.exe. Można to sprawdzić z wiersza polecenia za pomocą which objdump.exe. Jakoś 32-bitowy objdump.exe znalazł się na wyższym priorytecie na mojej ścieżce. To niedopasowanie łuku spowoduje błąd File format not recognized.

 5
Author: Neil Schneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-14 03:07:01