2012-02-06 101 views
1

我試圖用R產生2當R拋出錯誤的文件的第一個實際產生不錯,但第二人告訴我下面的:試圖編譯

conteo_correlaciones.c:3:15: error: R.h: No such file or directory conteo_correlaciones.c:4:24: error: Rinternals.h: No such file or directory conteo_correlaciones.c:31: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘countcorrelations’

兩個Rh和Rinternals.h是從R目錄複製,他們是在同一個目錄中的文件,該休息,但我不能讓過去的這個錯誤,這些文件正在由一個叫做包括這樣的:

#include <R.h> 
#include <Rinternals.h> 

和我在終端做的事情是:

R CMD SHLIB conteo_correlaciones.c 

偉大的工程,併產生了我正確的文件和:

gcc -dynamiclib conteo_correlaciones.c -o conteo_correlaciones.so 

會拋出我前面提到的錯誤。任何想法可能是什麼?

回答

0

你必須改變

#include <R.h> 
#include <Rinternals.h> 

#include "R.h" 
#include "Rinternals.h" 

如果頭文件是喜歡你的代碼文件同一目錄中。 或者您可以將正確的include路徑添加到gcc命令行(例如-I/usr/share/R/include)。

8

R CMD SHLIB添加了所有適當的標誌來編譯你的代碼。您無法(可靠地)「手動」編譯您的代碼。 R CMD SHLIB已經創建了所有必需的文件,因此您不需要自己運行gcc

例如,這是R CMD SHLIB運行:

$ R CMD SHLIB foo.c 
gcc -arch x86_64 -std=gnu99 -I/Library/Frameworks/R.framework/Resources/include 
    -I/Library/Frameworks/R.framework/Resources/include/x86_64 
    -I/usr/local/include -fPIC -g -O2 -c foo.c -o foo.o 
gcc -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names 
    -undefined dynamic_lookup -single_module -multiply_defined suppress 
    -L/usr/local/lib -o foo.so foo.o -F/Library/Frameworks/R.framework/.. 
    -framework R -Wl,-framework -Wl,CoreFoundation 

正如你可以看到有一個長的時間,需要創造適當的二進制標記的列表。第一行是彙編,第二行是鏈接。正如你所看到的,它甚至不是「你親手做的」。

至於確切的錯誤 - 這只是衆多的一個你會得到 - 在上述情況下,你需要包括R的包括路徑-I。還有其他的,所以你不想去那裏,只需堅持R CMD SHLIB

0

首先找到存儲R.h的地方(如果已經從源安裝了R,它可能位於/ usr/include或/ usr/local/include或任何位置)。在我的情況下,它是在/ home /用戶/ R /有/:

然後導出路徑:

export CPATH=/home/user/R/include/ 
export C_INCLUDE_PATH=/home/user/R/include/ 
export CPLUS_INCLUDE_PATH=/home/user/R/include/ 
export GCC_INCLUDE_DIR=/home/user/R/include/ 

的編制應然後運行正常。