我正在尝试在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()时,如何编译它呢?
答案 0 :(得分:2)
错误很明显:
fatal error: 'Ziggurat.h' file not found
这意味着您没有告诉R /编译器有关RcppZiggurat的信息。
修复很简单。如果是通过sourceCpp()
进行Rcpp驱动的编译,请添加
这一行
// [[Rcpp::depends(RcppZiggurat)]]
就是这样。所有这些都记录在Rcpp中,您或多或少都希望阅读至少一些文档。
如果要在Rcpp之外构建,则需要确保编译器找到头文件。一个人通常使用-I
标志,这通常讨论引入编译器的地方。