Rcpp执行sourceCpp时无法找到nloptrAPI.h头文件如何解决
问题解决方法
- 方法1:修改C++源码添加依赖声明(最推荐)
在你的nlopt.cpp文件最开头、引入头文件的代码之前,添加如下Rcpp属性声明:
// [[Rcpp::depends(nloptr)]]
sourceCpp执行时会自动识别该声明,动态调取nloptr包的头文件搜索路径,无需手动写死绝对路径。
- 方法2:调用
sourceCpp时手动传入头文件路径
如果不想修改C++源码,可在R中执行编译时动态传入路径:
# 自动获取nloptr包的头文件目录 nloptr_inc <- paste0("-I", system.file("include", package = "nloptr")) # 编译时传入头文件搜索路径 Rcpp::sourceCpp("R/nlopt.cpp", PKG_CPPFLAGS = nloptr_inc)
- 方法3:适配R包开发场景
如果你是在开发自定义R包,只需在包的DESCRIPTION文件中添加如下配置即可:
Imports: nloptr LinkingTo: nloptr
包编译安装时会自动识别nloptr的头文件路径。
内容的提问来源于stack exchange,提问作者JerryN
相关产品推荐
相关产品推荐

