当我将我的包提交给cran时,我得到错误,因为找不到调用:'R_registerRoutines','R_useDynamicSymbols'注册本机例程并禁用符号搜索是一个好习惯.我的包在CRAN的这个版本的R中进行了测试:
R版本3.4.0 alpha(2017-03-28 r72427)
注意这里有一个解决这个错误的问题 R CMD检查说明:发现没有调用:'R_registerRoutines','R_useDynamicSymbols' 但是我的外部代码在Fortran中并尝试了那里描述的过程,但没有为我解决问题.我该怎么做才能克服这个问题?谢谢
更新: 按照https://www.r-bloggers.com/1-easy-package-registration/描述的程序,我可以通过
Error:Found no calls to: ‘R_useDynamicSymbols’
Run Code Online (Sandbox Code Playgroud)
但Found no call to: 'R_registerRoutines'仍然存在.
我解决了这个问题,你可能会发现它对你自己的情况有用.假设你在src目录中有一个名为myf.f90的子程序,其中包含以下内容:
SUBROUTINE cf(r,cd,loci)
INTEGER::r,cd
DOUBLE PRECISION::loci
....
....
....
END SUBROUTINE cf
Run Code Online (Sandbox Code Playgroud)
要注册这个,您需要执行以下操作:
A)运行工具:: package_native_routine_registration_skeleton("包目录")
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);
}
Run Code Online (Sandbox Code Playgroud)
C)将完整输出复制并粘贴到packagename_init.c文件中以放入src /
D)更新NAMESPACE,验证useDynLib(packagename,.registration = TRUE)
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |