You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cpp11开发R包时devtools加载函数提示‘对象未找到’问题

使用cpp11开发R包时函数找不到的排查与解决方法

1. 确认源码目录与导出标记

  • 必须将C++源码文件放在包的src/目录下,devtools仅编译该目录下的代码,其他位置的源码无法生成可调用的动态链接库
  • C++函数必须添加[[cpp11::export]]标记才能被导出,示例代码:
    #include "cpp11.hpp"
    using namespace cpp11;
    
    [[cpp11::export]]
    integers Xt(integers X) {
      return X;
    }
    

2. 避免手动编写R包装函数

  • 删除你手动定义的R包装函数,cpp11会在编译时自动生成R/cpp11.R文件,其中包含正确调用内部C++函数的包装代码
  • 检查cpp11dummypackage-package.R,不要在其中定义或覆盖Xt函数,避免干扰自动生成的逻辑

3. 清理旧产物并重新编译

  • 先清理旧的编译文件:
    devtools::clean()
    
  • 强制重新编译并加载包:
    devtools::load_all(compile = TRUE)
    
  • 注意查看加载过程中的输出,如果有编译错误或警告,会直接导致函数无法正确导出

4. 检查包配置文件

  • 确认DESCRIPTION文件包含以下内容:
    LinkingTo: cpp11
    Imports: cpp11
    SystemRequirements: C++11
    
  • 确认NAMESPACE文件有自动生成的配置:
    import(cpp11)
    useDynLib(cpp11dummypackage, .registration = TRUE)
    
    不要手动修改这部分内容,cpp11会自动维护配置

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:35:07