使用静态链接库编译R包

时间:2017-09-01 11:04:29

标签: r r-package

我编写了一个带有一些Fortran子程序的R包。

使用英特尔IFORT进行优化编译Fortran子程序可以大大减少运行时间。我现在想要分发R-package,而不是作为源代码包,而是作为带有Intel IFORT二进制文件的内置包。

我可以使用基于IFORT的共享库轻松构建R包,但它需要英特尔库。我应该在包中包含这些库吗?这对我来说似乎不对,我该如何确定要包含哪些文件?

另一种方法是将我的软件包编译为静态链接库,因此依赖于与英特尔库一起分发(必要的部分将内置到我的库中,是吗?)。只是,这如何改变我的R包?我还在使用dyn.load吗?如何将其编译为静态?

正常的构建过程是: gfortran -fpic -g -O2 -c frotran.f95 -o frotran.o gfortran -shared -L/exports/applications/apps/SL7/R/3.3.2/lib64/R/lib -L/usr/local/lib64 -o MyPackage.so frotran.o -L/exports/applications/apps/SL7/R/3.3.2/lib64/R/lib -lR

我发现用gfortran替换ifort就足够了动态链接库。静态构建它通常由-c参数完成。我最后一次失败的结果是:

ifort -O3 -fpic -c frotran.f95 -o frotran.o ifort -O3 -c -L/exports/applications/apps/SL7/R/3.3.2/lib64/R/lib -L/usr/local/lib64 -o MyPackage.so frotran.o -L/exports/applications/apps/SL7/R/3.3.2/lib64/R/lib -lR

带输出:

ifort: warning #10145: no action performed for file 'frotran.o'

总结:

  1. 如果加载静态链接的库,我的R代码需要做什么?
  2. 如何让R静态编译

0 个答案:

没有答案