r - 如何创建独立的 Rmath.h 库来访问 C 中的 R 函数?
问题描述
我在创作中面临困难Rmath.dll
。我已经提到了几个来源:
我面临的问题如下:
我的 R (4.1.0) 安装目录不包含
src/nmath/standalone
“6.17 在你自己的 C 代码中使用这些函数”中提到的构建库的目录。我尝试通过下载和解压缩
R-4.1.0.tar
文件来构建库,然后按照R-admin中给出的说明进行操作。但是执行如下命令后仍然报错“undefined reference to `dnorm4'” :gcc -g -c -o Interoperate.o Interoperate.c -ID:/R-4.1.0/src/include -LD:/R-4.1.0/src/nmath/standalone/ -lRmath -lm
Interoperate.c
包含以下代码:
#define MATHLIB_STANDALONE
#include <R.h>
#include <Rmath.h>
int main()
{
/* Inputs */
double V1 = 1;
double V2 = 2;
/* Normal Distribution */
double result = dnorm(V1, V2, M_PI, 1);
printf("%lf\n",result);
return 0;
}
我现在没有选择了。我需要帮助解决这个问题。
解决方案
您通常会libRmath.a
在构建 R 时构建 Rmath 库。每次构建 Debian(和 Ubuntu)软件包时都会这样做,因为我已经按照这种方式进行了设置。现在距离我上次在 Windows 上尝试这个可能已经有几十年了,所以我无法帮助你完成这部分 - 但归根结底,这是一个ar
将文件粘合在一起的调用,所以如果你知道如何做到这一点,你可能会能够手工完成。
您的示例在这里运行良好(在 Ubuntu 上):
$ gcc -o answer answer.c -lRmath -I /usr/share/R/include
$ ./answer
-2.114329
$
$ ldd answer
linux-vdso.so.1 (0x00007ffe3a391000)
libRmath.so.1 => /usr/lib/libRmath.so.1 (0x00007f12e10b8000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f12e0ece000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f12e0d7f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f12e0d5d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f12e111f000)
$
推荐阅读
- python - (psycopg2.ProgrammingError) 无法适应“箭头”类型
- android-studio - Android Studio - 无法标记和删除
- c# - C# WPF 控件表单form2
- c# - 继承基类并更改属性名称
- material-ui - Material UI 示例,ReferenceError: Element is not defined
- php - 具有一个代码库的多个应用程序的结构
- kubernetes - Travis 客户端 - 使用 BitBucket 帐户登录
- unity3d - 将对象旋转到目标,同时旋转以匹配地形坡度
- reactjs - React Js 中的路由?
- c# - 尝试从具有数字键 c# 的 JSON 访问数据