- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 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() 使用它。
所以请帮忙!
非常感谢!
最佳答案
您的问题不完整,并且由于缺乏实际代码而无法重现。我可以建议几个问题:
R 中存在以下划线开头的符号。您未能链接的所有符号通常用作 PutRNGstate()
、Rf_rchisq()
、.. .也许您只需要修复您不小心设置的开关?
从您的帖子中并不清楚您是否想要将某些内容作为动态扩展加载到 R 中,或者是否想要使用这些 R 函数编写独立程序。您可以两者都做。
调用自己编写的函数可能很简单。通过依靠 Rcpp,我们甚至可以做到cppFunction('double foo(int df) { return Rf_rchisq(df); }')
并调用 foo(3)
重复(因为 Rcpp 通过其 RNGScope
类为我们处理 RNG 状态)。
如果您想要独立的东西,请查看“编写 R 扩展”手册和 Rmathlib 库。我之前发布过一些小例子。
关于c - 体系结构 x86_64 的 undefined symbol : getRNGstate() and putRNGstate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087409/
GetRNGstate()和 PutRNGstate()对我来说是个谜。我已阅读 的第 6.3 节编写 R 扩展 但它只说“用户必须调用”它们和“这些基本上读入(或创建).Random.seed 并在
我正在用 C 语言编写 gibbs 函数,并希望使用随机数函数,例如 rnorm()。 我的代码是这样的: #include #include #include #include void f
我是一名优秀的程序员,十分优秀!