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
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:
tools::package_native_routine_registration_skeleton(".")
et copiez et collez la sortie complète dans un fichier packagename_init.c
À placer dans src/
NAMESPACE
, en vérifiant que useDynLib(packagename, .registration = TRUE)
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.
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.