我正在构建一个新程序包:

  • 程序包名称包含一个点:例如my.package
  • 程序包导出一个Rcpp函数:例如rcppfunction

  • 当我使用Rcmd INSTALL构建软件包时,在后台使用compileAttributes来自动生成导出的函数,
    RcppExport SEXP my.package_rcppfunction(...)
    

    并且由于导出名称中的点而收到编译错误:
    RcppExports.cpp:10:19: error: expected initializer before '.' token
    

    作为一种解决方法,我可以更改软件包名称以从中删除点,但是我想要更好的解决方案并了解如何导出符号。所以我的问题是:
  • 如何参数化生成的代码,例如用“_”代替点(也许通过为export属性提供一些参数)。
  • 或如何更改g++调用以强制其编译此类点缀符号。.

  • 我不知道这是否有帮助,但是在这里我的g++调用:
    g++ -m32 -I"PATH_TO_R/R-30~1.2/include" -DNDEBUG    -
    I"PATH_To_R/3.0/Rcpp/include" -
    I"d:/RCompile/CRANpkg/extralibs64/local/include"
    -O2 -Wall  -mtune=core2 -c RcppExports.cpp -o RcppExports.o
    

    最佳答案

    您不能这样做-C或C++函数名称中根本不允许使用点:


    #include <stdlib.h>
    
    int foo.bar(int x) {
        return(2*x);
    }
    
    int main(void) {
        foo.bar(21);
        exit(0);
    }
    

    我们得到
    edd@max:/tmp$ gcc -c foo.c
    foo.c:4: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
    foo.c: In function ‘main’:
    foo.c:9: error: ‘foo’ undeclared (first use in this function)
    foo.c:9: error: (Each undeclared identifier is reported only once
    foo.c:9: error: for each function it appears in.)
    edd@max:/tmp$
    


    edd@max:/tmp$ g++ -c foo.c
    foo.c:4: error: expected initializer before ‘.’ token
    foo.c: In function ‘int main()’:
    foo.c:9: error: ‘foo’ was not declared in this scope
    edd@max:/tmp$
    

    在C++中,foo.bar()调用对象bar()的成员函数foo

    关于r - 程序包名称包含 "dot"和Rcpp函数时,程序包编译失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20720796/

    10-12 22:58