Windows10系统构建Rcpp包出现R_init_Auxilio重复定义编译错误求助
错误原因
报错核心是R_init_Auxilio函数重复定义,根因如下:
- 执行
compileAttributes()时,Rcpp会自动在src/RcppExports.cpp中生成原生 routine 注册的入口函数R_init_Auxilio - 后续手动调用
tools::package_native_routine_registration_skeleton()生成了src/init.c文件,该文件中也定义了同名的R_init_Auxilio函数,链接时两个同名函数冲突导致编译失败
解决方法
按以下步骤操作即可解决:
- 直接删除
src目录下的init.c文件,使用Rcpp开发的包不需要手动生成原生函数注册文件,Rcpp已经自动处理了相关逻辑 - 清理残留的临时构建文件:删除包目录下的
src/RcppExports.cpp、src/RcppExports.h、以及之前构建生成的Auxilio_1.0.tar.gz等临时文件 - 重新执行如下流程:
library(Rcpp) compileAttributes("Auxilio", verbose=TRUE) library(devtools) build("Auxilio") install("Auxilio")
补充注意事项
tools::package_native_routine_registration_skeleton仅用于非Rcpp开发的原生包手动注册函数场景,Rcpp开发的包不需要调用该函数- 你的代码中调用了
rhalfnorm函数,如果该函数来自第三方R包,需要在DESCRIPTION文件的Imports字段添加对应包名,同时在NAMESPACE中添加对应导入声明,避免运行时报找不到函数的错误
内容的提问来源于stack exchange,提问作者JuanRengifo101
相关产品推荐
相关产品推荐

