Paket R dengan kode C, 'tidak ada simbol seperti itu' dalam paket dll
Saya sedang menulis paket R, dan mulai memasukkan kode C di dalamnya. Mengikuti petunjuk dari sini , di bawah "memulai dengan .C ()", saya membuat fungsi ac di src /, dan pembungkus r ke sana, menautkan melalui tag roxygen @useDynLib(<package-name>, <name_of_c_function>)
.
Namun, setelah dijalankan devtools::document()
, saya mendapatkan error berikut:
Error in FUN(X[[i]], ...) :
no such symbol <name_of_c_function> in package C:/path/to/package/src/<package-name>.dll
Saya membaca bahwa memperbarui R dan Rtools telah memperbaiki masalah untuk beberapa orang. Saya telah memperbarui keduanya kemarin, tetapi tidak berhasil.
Bantuan apa pun akan sangat dihargai.
(Ini serupa dengan masalah dalam pertanyaan ini , yang saat ini belum terjawab.)
(Ini mungkin juga terkait dengan pertanyaan ini , kecuali bahwa saya menggunakan devtools :: document () daripada R CMD dalam pertanyaan itu.)
Kode yang relevan:
# 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) {...}
Jawaban
Ternyata masalahnya ada di baris ini
static void name_of_c_function(...){...}
Seperti yang disebutkan dalam posting ini ,
Kata kunci statis agak berlebihan. Jika diterapkan ke fungsi, artinya fungsi tersebut memiliki keterkaitan internal, yaitu cakupannya terbatas pada unit terjemahan (hanya sebagai file sumber).
Dengan kata lain, kata kunci 'statis' membuat fungsi tidak lagi dapat dipanggil dari luar unitnya sendiri, sehingga menghasilkan kesalahan "tidak ada simbol seperti itu".
Menghapus kata kunci 'statis' menyelesaikan masalah.