web-dev-qa-db-fra.com

R CMD check note: Aucun appel n'a été trouvé vers: «R_registerRoutines», «R_useDynamicSymbols»

Comment éviter la REMARQUE suivante qui apparaît dans R CMD check avec la nouvelle version de développement R (R En cours de développement (instable) (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.

Par exemple dans Hmisc

44
Crops

Le message est quelque peu obscur. J'ai également cherché dans d'autres packages et j'ai trouvé que la useDynLib(packagename) du fichier NAMESPACE était remplacée par useDynLib(packagename, .registration = TRUE).

De plus, j'ai ajouté un fichier .c, Nommé registerDynamicSymbol dans le répertoire src/ Avec le code suivant:

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

J'ai pris cette suggestion de GitHub Rcpp . La référence canonique est dans Writing R Extensions

Aussi R Devel Mailinglist fourni des informations supplémentaires.

[~ # ~] mise à jour [~ # ~]

L'approche la plus directe est la suivante:

  1. utiliser la version de développement R actuelle (qui deviendra finalement 3.4)
  2. Exécutez la tools::package_native_routine_registration_skeleton(".") et copiez et collez la sortie complète dans un fichier packagename_init.c À placer dans src/
  3. mettre à jour NAMESPACE, en vérifiant que useDynLib(packagename, .registration = TRUE)
  4. Si nécessaire, remplacez le exportPattern par export( list of object to be exported )

MISE À JOUR 18 juillet

Comme indiqué par @Symbolix en utilisant la version la plus récente de R et de devtools de RStudio, le point 2. (fichiers init.c) apparaît géré par devtools (en utilisant le chiffre de contrôle RStudio) ou des packages d'outils.

37
Giorgio Spedicato

J'ai rencontré un problème persistant avec un package de build Windows. (.dll au lieu de .so)

La réponse acceptée ci-dessus devrait également résoudre ce problème pour Windows, mais si elle ne le résout pas. Sois sûr que objdump.exe pointe l'arc approprié. c'est à dire. .../Mingw_64/bin/objdump.exe. Cela peut être vérifié à partir d'une invite de commande avec which objdump.exe. D'une manière ou d'une autre 32 bits objdump.exe a trouvé son chemin vers une position plus prioritaire sur mon chemin. Cette incompatibilité Arch produira un File format not recognized Erreur.

5
Neil Schneider