gpt4 book ai didi

c - 体系结构 x86_64 的 undefined symbol : getRNGstate() and putRNGstate()

转载 作者:行者123 更新时间:2023-11-30 15:49:49 25 4
gpt4 key购买 nike

我正在用 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?

顺便说一句,我发现 R.h 和 rmath.h 文件至少在 3 个地方!我不知道应该在 Xcode 中重新定位哪个路径! 目前我正在添加与第三个相同的 header 路径。所有#include 都工作正常。

R.Frameworks/Headers
R.Frameworks/Versions/2.15/Resources/include
R.Frameworks/Versions/Current/Resources/include

等等

但无论哪种方式,没有任何类似 rnorm() 的函数的 C 函数都可以工作,并且 R 可以通过 dyn.load() 使用它。

所以请帮忙!

非常感谢!

最佳答案

您的问题不完整,并且由于缺乏实际代码而无法重现。我可以建议几个问题:

  1. R 中存在以下划线开头的符号。您未能链接的所有符号通常用作 PutRNGstate()Rf_rchisq()、.. .也许您只需要修复您不小心设置的开关?

  2. 从您的帖子中并不清楚您是否想要将某些内容作为动态扩展加载到 R 中,或者是否想要使用这些 R 函数编写独立程序。您可以两者都做。

  3. 调用自己编写的函数可能很简单。通过依靠 Rcpp,我们甚至可以做到cppFunction('double foo(int df) { return Rf_rchisq(df); }') 并调用 foo(3)重复(因为 Rcpp 通过其 RNGScope 类为我们处理 RNG 状态)。

  4. 如果您想要独立的东西,请查看“编写 R 扩展”手册和 Rmathlib 库。我之前发布过一些小例子。

关于c - 体系结构 x86_64 的 undefined symbol : getRNGstate() and putRNGstate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com