在 Fortran 中从多个源文件链接到单个库的共享对象

Shared objects linking in Fortran from multiple source files into a single library

我在将多个 Fortran modules/subroutines 链接到共享库时遇到问题。

事实是,我首先有一个独立的 Fortran 程序,一切都很顺利。这包括

main.f95
mymodule.f95
myutils.f95

但现在我正在调整,以便我可以从 R 调用 Fortran 代码。

所以,我放弃了主程序 main.f95,我有了一个新文件,比方说

callFromR.f95

其中包含一个将从 R 调用的子例程。该例程应使用模块 mymodule,并且该模块依赖于 myutils。 我将它们全部编译为共享对象:

gfortran -shared -fPIC callFromR.f95 -o callFromR.so
gfortran -shared -fPIC mymodule.f95 -o mymodule.so
gfortran -shared -fPIC myutils.f95 -o myutils.so

现在我需要以某种方式将它们全部组合到一个共享对象文件(而不是对象文件)中。我该怎么做?

(因此,当我在R中调用callFromR子程序时,一些位于mymodule代码中的子程序找不到。)

您可以先创建目标文件

gfortran -c -fPIC callFromR.f95 -o callFromR.o
gfortran -c -fPIC mymodule.f95 -o mymodule.o
gfortran -c -fPIC myutils.f95 -o myutils.o

然后打包入库

gfortran -shared  callFromR.o  mymodule.o myutils.o -o callFromR.so