Tsu*_*oku 1 terminal compiler-errors r
我正在尝试使用R生成2个文件,第一个实际生成的文件非常好,但第二个文件告诉我以下内容:
conteo_correlaciones.c:3:15:错误:Rh:没有这样的文件或目录conteo_correlaciones.c:4:24:错误:Rinternals.h:没有这样的文件或目录conteo_correlaciones.c:31:错误:预期'=',' 'countcorrelations'之前的' ',';','asm'或' attribute '
Rh和Rinternals.h都是从R目录复制的,它们和其他文件在同一个目录中,但是我无法通过这个错误,这些文件被这样的包调用:
#include <R.h>
#include <Rinternals.h>
Run Code Online (Sandbox Code Playgroud)
而我在终端做的是:
R CMD SHLIB conteo_correlaciones.c
Run Code Online (Sandbox Code Playgroud)
哪个效果很好,并为我生成正确的文件,并且:
gcc -dynamiclib conteo_correlaciones.c -o conteo_correlaciones.so
Run Code Online (Sandbox Code Playgroud)
这让我误解了上述错误.知道可能是什么?
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,创建正确的二进制文件需要很长的标志列表.第一行是编译,第二行是链接.正如你所看到的那样,它甚至都不是你想要"手工"做的.
至于确切的错误 - 它只是你会得到的许多错误中的一个 - 在上面的例子中你需要包含R的包含路径-I.还有其他人,所以你不想去那里,坚持下去R CMD SHLIB.