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

标签 c r

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

相关文章:

javascript - R Highcharter 自定义图例以仅显示某些值

python - 为什么 R 代码在 ubuntu 中不能通过 API 运行?

r - 如何仅用图例绘制一个空的ggplot?

python - Pandas 与 R 中相同的正则表达式但结果不同

r - 如何用 GGally::ggpairs 制作气泡图?

c - 这两种说法有什么区别?

c++ - 为什么不能像这样复制 char 数组 charArray ="some string";

c - STDIN 缓冲区和 getchar() 指针在连续调用期间如何变化?

C for 循环迭代

c - 在 Linux 中构建系统调用。内核 > 3.x.x