我一直在尝试使用Rcpp软件包将某些c / c++代码的功能扩展到R中。

但是我在包含标题和链接时遇到问题

我制作了以下示例来说明我的问题:

  • 我有一个包含.h文件和.c文件的原始c程序

  • 头文件:add.h
    int add(int a,int b);
    

    cfile:add.c
    int add(int a,int b){
      return a+b;
    }
    
  • 一个“接口(interface)” c++函数,应将我的R调用与c文件
  • 中的功能连接起来

    猴子cpp
    #include <cstdio>
    #include <Rcpp.h>
    #include "add.h"
    using namespace Rcpp;
    
    // [[Rcpp::export]]
    NumericVector monkey(std::string string1,std::string string2) {
    
      //below not important
      NumericVector rary(5);
      for(int i=0;i<5;i++)
        rary[i] = i;
      return rary;
    }
    
  • 尝试使用“猴子”函数
  • 的Rcode

    猴子
    nam1 <- "nam1"
    nam2 <- "nam2"
    
    Rcpp::sourceCpp("monkey.cpp")
    
    monkey(nam1,nam2)
    

    q1。是否可以使用sourceCpp函数为gcc编译指定-I标志?

    q2。如果我的接口(interface)cpp文件依赖于其他.o文件,是否可以使用sourceCpp函数与这些文件链接?

    最佳答案

    快速的:

  • sourceCpp()适用于小型测试应用程序。它可以使用一组扩展程序,这些扩展程序提供扩展插件。
  • 因此,您可能需要为您的头文件编写一个自定义插件,而这可能是过大的,因为...
  • R中更复杂的代码组织通常是通过包完成的。您应该考虑一下。

  • “Rcpp属性”小插图中的3.5节提供了所有选项。

    10-08 06:14