RcppZiggurat无法编译示例代码

时间:2014-11-29 03:06:44

标签: r rcpp

我正在尝试在R中使用Ziggurat采样器,但实际上想在我的C ++代码中直接使用它。我安装了GSL库,RcppGSL和RcppZiggurat,并在R中使用zrnorm()工作正常。我认为没问题,让我们尝试编译RcppZiggurat.pdf中提供的代码示例,并从那里直接在我的C ++代码中实现Ziggurat采样器......但是会发生以下情况......

从pdf文件我认为我可以简单地利用:

    #include <Rcpp.h>
    #include <Ziggurat.h>
    static Ziggurat::Ziggurat::Ziggurat zigg;
    // [[Rcpp::export]]
    Rcpp::NumericVector zrnorm(int n) {
    Rcpp::NumericVector x(n);
    for (int i=0; i<n; i++) {
    x[i] = zigg.norm();
    }
    return x;
    }
   // [[Rcpp::export]]
   void zsetseed(unsigned long int s) {
   zigg.setSeed(s);
   return;
   }

错误:

official_zigg_code.cpp:2:10: fatal error: 'Ziggurat.h' file not found
#include <Ziggurat.h>
     ^
1 error generated.
make: *** [official_zigg_code.o] Error 1


clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include -      
   I/usr/local/include/freetype2 -I/opt/X11/include  -   
   I"/Library/Frameworks/R.framework/Versions/3.1/Resources/library/Rcpp/include"    -fPIC  -Wall -
   mtune=core2 -g -O2  -c official_zigg_code.cpp -o official_zigg_code.o
   Error in Rcpp::sourceCpp("official_zigg_code.cpp") : 
   Error 1 occurred building shared library.

我完全不知道如何从这里开始。我拼命想在堆栈交换上找到答案,但没有什么可以帮我解决这个问题。据我所知,RcppZiggurat包实际上使用了上面的函数,所以当我能够直接使用zrnorm()时,如何编译它呢?

1 个答案:

答案 0 :(得分:2)

错误很明显:

fatal error: 'Ziggurat.h' file not found

这意味着您没有告诉R /编译器有关RcppZiggurat的信息。

修复很简单。如果是通过sourceCpp()进行Rcpp驱动的编译,请添加 这一行

// [[Rcpp::depends(RcppZiggurat)]]

就是这样。所有这些都记录在Rcpp中,您或多或少都希望阅读至少一些文档。

如果要在Rcpp之外构建,则需要确保编译器找到头文件。一个人通常使用-I标志,这通常讨论引入编译器的地方。