Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R在尝试编译时抛出错误_R_Compiler Errors_Terminal - Fatal编程技术网

R在尝试编译时抛出错误

R在尝试编译时抛出错误,r,compiler-errors,terminal,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”或“属性” R.h和Rinternals.h都是从R目录中复制的,它们与其余文件

我尝试使用R生成2个文件第一个文件实际上生成的非常好,但第二个文件告诉我:

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

R.h和Rinternals.h都是从R目录中复制的,它们与其余文件位于同一目录中,但我无法克服此错误,这些文件由包含调用,如下所示:

#include <R.h>
#include <Rinternals.h>
这非常有效,并为我生成了正确的文件和:

gcc -dynamiclib conteo_correlaciones.c -o conteo_correlaciones.so
这让我想起了前面提到的错误。知道会是什么吗

你必须改变

#include <R.h>
#include <Rinternals.h>
如果头文件与代码文件位于同一目录中。 或者您可以将正确的include路径添加到gcc命令行(例如,
-I/usr/share/R/include
)。

您必须更改

#include <R.h>
#include <Rinternals.h>
如果头文件与代码文件位于同一目录中。
或者您可以将正确的include路径添加到gcc命令行(例如,
-I/usr/share/R/include
)。

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
如您所见,创建正确的二进制文件需要一长串标志。第一行是编译,第二行是链接。正如你所看到的,它甚至与你试图“用手”做的事情并不接近


至于确切的错误-这只是您将得到的众多错误之一-在上述情况下,您需要使用
-I
包含R的include路径。还有其他的,所以你不想去那里,只要坚持使用
R CMD SHLIB

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
如您所见,创建正确的二进制文件需要一长串标志。第一行是编译,第二行是链接。正如你所看到的,它甚至与你试图“用手”做的事情并不接近


至于确切的错误-这只是您将得到的众多错误之一-在上述情况下,您需要使用
-I
包含R的include路径。还有其他的,所以你不想去那里,只要坚持使用
R CMD SHLIB

首先定位R.h的存储位置(它可以在/usr/include或/usr/local/include中,如果R是从源代码安装的,也可以在任何地方)。在我的例子中,它位于/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/

然后编译应该可以正常运行。

首先找到R.h的存储位置(它可以位于/usr/include或/usr/local/include中,如果R是从源代码安装的,则可以位于任何位置)。在我的例子中,它位于/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/
然后编译应该可以正常运行