Fortran 代码并发现没有调用:'R_registerRoutines'、'R_useDynamicSymbols'

Fortran code and Found no calls to: 'R_registerRoutines', 'R_useDynamicSymbols'

当我将我的包裹提交给 cran 时,出现如下错误 发现没有调用:'R_registerRoutines'、'R_useDynamicSymbols' 注册本机例程并禁用符号是一种很好的做法 搜索。 我的包由 CRAN 在这个版本的 R 中测试:

R 版本 3.4.0 alpha (2017-03-28 r72427)

注意这里有这个错误的解决方法 但我的外部代码在 Fortran 中并尝试了那里描述的过程但没有为我解决问题。我能做些什么来克服这个问题? 谢谢

更新: 按照描述的程序 https://www.r-bloggers.com/1-easy-package-registration/ 我可以通过

Error:Found no calls to: ‘R_useDynamicSymbols’

但是Found no call to: 'R_registerRoutines'仍然存在。

我解决了这个问题,您可能会发现它对您自己的情况有用。 假设您在 src 目录中有一个名为 myf.f90 的子程序,其内容如下:

    SUBROUTINE cf(r,cd,loci)
    INTEGER::r,cd
    DOUBLE PRECISION::loci
....
....
....
    END SUBROUTINE cf

要注册,您需要执行以下操作:

A) 运行 tools::package_native_routine_registration_skeleton("package directory")

B) 编辑输出;对于上面的例子将是:

#include <R.h>
#include <Rinternals.h>
#include <stdlib.h> // for NULL
#include <R_ext/Rdynload.h>

/* FIXME:
Check these declarations against the C/Fortran source code.
*/

/* .Fortran calls */
extern void F77_NAME(cf)(int *r, int *cd, double *loci);

static const R_FortranMethodDef FortranEntries[] = {
  {"cf", (DL_FUNC) &F77_NAME(cf),  3},
  {NULL, NULL, 0}
};

void R_init_packagename(DllInfo *dll)
{
  R_registerRoutines(dll, NULL, NULL, FortranEntries, NULL);
  R_useDynamicSymbols(dll, FALSE);
}

C) 将完整的输出复制并粘贴到要放入 src/

的 packagename_init.c 文件中

D) 更新 NAMESPACE,验证 useDynLib(packagename, .registration = TRUE)