我在将多个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
代码中的一些子例程。)
答案 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