从VC ++调用R函数

时间:2011-12-22 14:19:37

标签: c++ r visual-c++

我需要在我的C ++代码中运行R中的统计函数。有没有办法从我的C ++代码中调用它们?我正在使用VS 2005,我是否需要包含任何头文件或链接任何库?我使用他们网站提供的标准Windows安装程序安装了R。

问候,

2 个答案:

答案 0 :(得分:4)

简言之:

  • 正如相当频繁地说过的那样,R本身并不构建  VS *使C代码链接很难但可能和C ++代码  不可能(因为功能标题信息未标准化)。

  • 根据标准,Rcpp和RInside在Windows上运行良好  Windows工具链。 (RInside确实有一个错误,但现在已经修复了。)

    Rcpp常见问题解答更多关于VS *的说法(即您不能指望这一点  如果R本身不能与编译器一起工作,那么

  • 如果您必须使用VS *,那么您最好的选择可能是松散耦合  通过网络和使用Rserve。

    如果你可以切换编译器,那么Rcpp / rnside可能是有意义的;和  其余的R API也可供您使用。

  • Rcpp等人有大量文档,包括Rcpp-introduction pdf(也就是说  同时评论的文章)和前面提到的Rcpp-FAQ ---以及专门的邮件列表。

请不要交叉发帖。我也刚刚回答了这个on r-help

答案 1 :(得分:-1)

https://rforge.net/Rserve/files/上提供的Rserve二进制版本不是在Microsoft Visual C ++下构建的。在文件ReadMe.txt中,作者指出没有Windows配置,但有一个特殊的Makefile.win。我们没有成功构建它,使用" make -f Makefile.win",因为没有提供文件config.h(只有config.h.in)。

  1. 因此,请在头文件Rsrv.h中注释以下行:

    // #include"配置.h"

  2. 在此阶段,会生成以下错误:

    rsrv .h(384):致命错误C1189:#error:"无法确定字节序。确保包含配置.h或_ _ {BIG | LITTLE} _ENDIAN__已定义。"

    1. 解决与字节序相关的问题。在头文件Rsvr.h中,替换:
    2. /* Windows is little-endian is most cases, anywhere else we're stuck*/
       # error "Cannot determine endianness. Make sure config.h is included or  __{BIG|LITTLE}_ENDIAN__ is defined ."
      # endif
      

      由:

      /********* MODIFICATION *************/
      
      /* # error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ." */
      /************************************/
      #define _BIG_ENDIAN (*(uint16_t *)?\xff? < 0x100)
      
      1. 确保构建环境链接到Winsock库文件Ws2_32.lib。为此,请在主函数之前添加以下代码行:
      2. /* indicate to the linker that the Ws2_32.lib file is needed */
        #pragma comment(lib, "Ws2_32.lib") 
        

        使用Winsock的应用程序必须与Ws2_32.lib库文件链接。

        有关通过Rserve进行R和Microsoft Visual C ++集成的更多详细信息,请访问https://www.researchgate.net/publication/305789407_Rserve_for_Windows_case_of_R_and_Microsoft_Visual_C_integration