在 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
我在将多个 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