C 코드가있는 R 패키지, 패키지 dll에 '해당 기호 없음'
Aug 20 2020
R 패키지를 작성 중이며 C 코드를 포함하기 시작했습니다. 여기의 지침 에 따라 ".C () 시작하기"에서 src /에 ac 함수를 만들고 roxygen 태그를 통해 연결하는 r 래퍼를 만들었습니다 @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를 업데이트하면 일부 문제가 해결되었다고 읽었습니다. 어제 둘 다 업데이트했지만 아무 소용이 없습니다.
어떤 도움이라도 대단히 감사하겠습니다.
(이것은 현재 답변되지 않은 이 질문 의 문제와 유사합니다 .)
(그 질문 에서 R CMD 대신 devtools :: document ()를 사용한다는 점을 제외 하고는 이 질문 과 관련이있을 수도 있습니다 .)
관련 코드 :
# 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) {...}
답변
bert Aug 20 2020 at 16:41
문제가이 줄에 있음이 밝혀졌습니다.
static void name_of_c_function(...){...}
에서 언급 한 바와 같이 이 게시물에 ,
static 키워드가 다소 과도하게 사용되었습니다. 함수에 적용 할 때 함수에 내부 연결이 있음을 의미합니다. 즉, 범위가 번역 단위 (간단히 소스 파일) 내로 제한됩니다.
즉, 'static'키워드는 더 이상 자체 단위 외부에서 함수를 호출 할 수 없게하여 "no such symbol"오류가 발생합니다.
'static'키워드를 제거하면 문제가 해결됩니다.