Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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
从C代码为R创建共享对象_C_R - Fatal编程技术网

从C代码为R创建共享对象

从C代码为R创建共享对象,c,r,C,R,我有一个C代码,我想通过创建共享对象并在R中动态加载该对象,从R调用其中的函数。在R中创建共享对象的代码是: R CMD SHLIB myfile.c 一般的做法是: gcc -c -Wall -Werror -fpic myfile.c gcc -shared -o myfile.so myfile.o 我想知道这两个myfile之间是否有任何区别。因此,在R中使用这些不同代码创建的文件。这两个文件的大小非常不同(17KB和32KB),这让我很困惑。当你这样做时 gcc -c -Wall

我有一个C代码,我想通过创建共享对象并在R中动态加载该对象,从R调用其中的函数。在R中创建共享对象的代码是:

R CMD SHLIB myfile.c
一般的做法是:

gcc -c -Wall -Werror -fpic myfile.c
gcc -shared -o myfile.so myfile.o
我想知道这两个
myfile之间是否有任何区别。因此,在R中使用这些不同代码创建的
文件。这两个文件的大小非常不同(17KB和32KB),这让我很困惑。

当你这样做时

gcc -c -Wall -Werror -fpic myfile.c
gcc -shared -o myfile.so myfile.o
您错过了
R CMD SHLIB
使用的几个标志,例如优化标志
-O2
、调试标志
-g
,等等。为什么不看看在执行此操作时屏幕上打印的内容:

R CMD SHLIB myfile.c
我提到的标志对代码大小以及编译代码的效率都有影响。产生的目标代码是不同的。您可以使用反汇编程序:

objdump -d myfile.so
检查(二进制)汇编代码以及代码大小。你也可以使用

gcc -S -Wall -Werror -fpic myfile.c
检查(可读)汇编代码。无论您是否使用
-O2
,您都会看到巨大的差异


是一个GUI交互式汇编程序。在左侧窗口中键入C代码,然后选择编译器、编译标志、输出显示配置等,然后将在右侧窗口中生成汇编代码。这对于HPC代码编写者评估和优化代码非常方便。对于您来说,这是一种比较目标代码差异的简便方法