簡體   English   中英

如何創建獨立的 Rmath.h 庫以訪問 C 中的 R 函數?

[英]How to create standalone Rmath.h library to access R functions in C?

我在創建Rmath.dll時遇到了困難。 我已經提到了幾個來源:

  1. R-exts 6.17:在您自己的 C 代碼中使用這些功能
  2. R-admin 9:獨立的 Rmath 庫
  3. 使用 R 獨立數學庫

我面臨的問題如下:

  1. 我的 R (4.1.0) 安裝目錄不包含“6.17 在您自己的 C 代碼中使用這些函數”中提到的構建庫的src/nmath/standalone目錄。

  2. 我嘗試通過下載和提取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;
}

我現在沒有選擇了。 我需要幫助解決這個問題。

您通常在構建 R 時構建libRmath.a - 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)
$ 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM