带有 C 代码的 R 包,包 dll 中"没有这样的符号"



我正在编写一个R包,并开始在其中包含C代码;开始使用.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已经解决了一些问题。我昨天已经更新了这两个,但都没有用。

任何帮助都将不胜感激。

(这与这个问题中的问题类似,目前还没有答案。(

(这也可能与这个问题有关,只是我在这个问题中使用了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(...){...}

如本文所述,

static关键字使用过度。当它应用于函数时,意味着函数具有内部链接,即其范围仅限于翻译单元内(简单地作为源文件(。

换句话说,"static"关键字使函数不再可从其自身单元外部调用,从而导致";没有这样的符号";错误

删除"static"关键字可以解决问题。

最新更新