从C代码为R创建共享对象
我有一个C代码,我想通过创建共享对象并在R中动态加载该对象,从R调用其中的函数。在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
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代码编写者评估和优化代码非常方便。对于您来说,这是一种比较目标代码差异的简便方法