带有C代码的R包,包dll中的'no such symbol'
R package with C code, 'no such symbol' in package dll
我正在编写一个 R 包,并开始在其中包含 C 代码。按照 here 的说明,在“.C() 入门”下,我在 src/ 中创建了一个 c 函数,并为它创建了一个 r 包装器,通过 roxygen 标签链接 @useDynLib(<package-name>, <name_of_c_function>)
.
但是,在 运行 devtools::document()
之后,我得到以下错误:
Error in FUN(X[[i]], ...) :
no such symbol <name_of_c_function> in package C:/path/to/package/src/<package-name>.dll
我了解到更新 R 和 Rtools 已经解决了一些问题。我昨天更新了两个,但是没有用。
任何帮助将不胜感激。
(这与 this question 中的问题类似,目前没有答案。)
(也可能与this question有关,只是我在那个问题中使用devtools::document()而不是R CMD。)
相关代码:
# R file
#' @useDynLib <package-name> <name_of_c_function>
#' @export
name_of_func <- function(y) {
stopifnot(is.numeric(y))
.C(name_of_c_function, y,y,length(y),1) [[2]]
}
// C file
<#include stdlib.h>
static void name_of_c_function(double* y, double* x,
const unsigned int length, const double a) {...}
原来是这一行的问题
static void name_of_c_function(...){...}
如、
所述
The static keyword is somewhat over used. When it applies to function, it means that the function has internal linkage, ie its scope is limited to within a translation unit (simply as a source file).
换句话说,'static' 关键字使该函数不再可从其自身单元外部调用,从而导致“没有这样的符号”错误。
删除 'static' 关键字即可解决问题。
我正在编写一个 R 包,并开始在其中包含 C 代码。按照 here 的说明,在“.C() 入门”下,我在 src/ 中创建了一个 c 函数,并为它创建了一个 r 包装器,通过 roxygen 标签链接 @useDynLib(<package-name>, <name_of_c_function>)
.
但是,在 运行 devtools::document()
之后,我得到以下错误:
Error in FUN(X[[i]], ...) :
no such symbol <name_of_c_function> in package C:/path/to/package/src/<package-name>.dll
我了解到更新 R 和 Rtools 已经解决了一些问题。我昨天更新了两个,但是没有用。
任何帮助将不胜感激。
(这与 this question 中的问题类似,目前没有答案。)
(也可能与this question有关,只是我在那个问题中使用devtools::document()而不是R CMD。)
相关代码:
# R file
#' @useDynLib <package-name> <name_of_c_function>
#' @export
name_of_func <- function(y) {
stopifnot(is.numeric(y))
.C(name_of_c_function, y,y,length(y),1) [[2]]
}
// C file
<#include stdlib.h>
static void name_of_c_function(double* y, double* x,
const unsigned int length, const double a) {...}
原来是这一行的问题
static void name_of_c_function(...){...}
如
The static keyword is somewhat over used. When it applies to function, it means that the function has internal linkage, ie its scope is limited to within a translation unit (simply as a source file).
换句话说,'static' 关键字使该函数不再可从其自身单元外部调用,从而导致“没有这样的符号”错误。
删除 'static' 关键字即可解决问题。