R在尝试编译时抛出错误

时间:2012-02-06 17:53:59

标签: r compiler-errors terminal

我正在尝试使用R生成2个文件,第一个实际生成的文件相当不错,但第二个文件告诉我以下内容:

  

conteo_correlaciones.c:3:15:错误:R.h:没有这样的文件或目录   conteo_correlaciones.c:4:24:错误:Rinternals.h:没有这样的文件或   目录conteo_correlaciones.c:31:错误:预期'=',',',';',   'countcorrelations'之前的'asm'或'属性'

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

这引发了我上述错误。知道可能是什么?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你必须改变

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

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

如果头文件与代码文件在同一目录中。 或者您可以将正确的包含路径添加到gcc命令行(例如-I/usr/share/R/include)。

答案 2 :(得分:0)

首先找到存储R.h的位置(如果已从源安装R,则可以在/ usr / include或/ usr / local / include或任何位置)。在我的情况下,它位于/ home / user / R / include /:

然后导出路径:

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/

然后编译应运行正常。