我正在用 C 编写一个 gibbs 函数,并想使用随机数函数,例如 rnorm()。
我的代码是这样的:
#include <stdio.h>
#include <string.h>
#include <R.h>
#include <Rmath.h>
void foo(int *nin, double *x)
{
int n = nin[0];
int i;
GetRNGstate();
for (i=0; i<n; i++)
{
x[i] = rchisq(2);
Rprintf("%f\n",x[i]);
}
// exit R random-gen routine
PutRNGstate();
}
但是,当我尝试在 Xcode 中构建时,错误消息是:
> Undefined symbols for architecture x86_64: "_GetRNGstate",
> referenced from:
> _gibbs in main.o "_PutRNGstate", referenced from:
> _gibbs in main.o "_Rf_rchisq", referenced from:
> _gibbs in main.o "_Rf_rnorm", referenced from:
> _gibbs in main.o "_Rf_runif", referenced from:
> _gibbs in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see
> invocation)
我正在使用 Xcode,我知道我同时拥有 R 和 R64bit。在终端 $R 上运行 R64bit,而我的 Aquamacs 也运行 R64bit。我不知道这是否是不同版本的冲突,如果是,我怎样才能说服 Xcode 正确引用 R?
顺便说一句,我发现 Rh 和 rmath.h 文件至少在 3 个地方!我不知道我应该在 Xcode 中重新定位哪条路径!目前我正在添加与第三个相同的标题路径。所有#include 工作正常。
R.Frameworks/Headers
R.Frameworks/Versions/2.15/Resources/include
R.Frameworks/Versions/Current/Resources/include
ETC
但无论哪种方式,一个没有任何 rnorm() 类函数的 C 函数都可以工作,R 可以通过 dyn.load() 使用它。
所以请帮忙!
非常感激!