将Fortran中的多个源文件链接到一个库中的共享对象

时间:2017-05-19 09:57:11

标签: compilation fortran shared-libraries gfortran

我在将多个Fortran模块/子程序链接到共享库时遇到问题。

问题是,我首先有一个独立的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代码中的一些子例程。)

1 个答案:

答案 0 :(得分:1)

您可以先创建目标文件

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