使用Makefile从Fortran源代码生成DLL文件

使用Makefile从Fortran源代码生成DLL文件,dll,makefile,fortran,Dll,Makefile,Fortran,如何从用Fortran编写的Makefile生成DLL文件? 我使用的是Windows,但在Linux系统下编译并不是问题 我有两个模块和一个使用这些模块的文件。 通常情况下,我会写以下内容来产生我想要的: gfortran module1.f90 module2.f90 main.f90 -o main.dll 如果module1.f90和module2.f90只是模块,并且您想要创建dll,则可以使用以下命令: gfortran -o main.dll module1.f90 module

如何从用Fortran编写的Makefile生成DLL文件? 我使用的是Windows,但在Linux系统下编译并不是问题

我有两个模块和一个使用这些模块的文件。 通常情况下,我会写以下内容来产生我想要的:

gfortran module1.f90 module2.f90 main.f90 -o main.dll

如果
module1.f90
module2.f90
只是模块,并且您想要创建dll,则可以使用以下命令:

gfortran -o main.dll module1.f90 module2.f90 -shared -fPIC -lgfortran
它将生成一个dll,稍后可由主程序加载

此处用于生成库的主要标志是
-shared
-fPIC

如果主程序为
main.f90
,则输出应为
exe
,编译命令可能:

gfortran -o main.exe module1.f90 module2.f90 main.f90
它将使用模块生成带有主文件的
exe


编辑: 下面是构建DLL的示例Makefile(针对问题):

执行后:

gfortran -g -shared -fPIC -o module1.o module1.f90
gfortran -g -shared -fPIC -o module2.o module2.f90
gfortran  -o main.dll main.f90 module1.o module2.o
它生成DLL:

20/12/2016  16:23            59.091 main.dll
也许,使用宏可以改进这个Makefile


使用gfortran版本6.2.0(x86_64-posix-seh-rev0,由MinGW-W64项目构建)进行测试。

如果
module1.f90
module2.f90
只是模块,并且您想要创建dll,可以使用以下命令:

gfortran -o main.dll module1.f90 module2.f90 -shared -fPIC -lgfortran
它将生成一个dll,稍后可由主程序加载

此处用于生成库的主要标志是
-shared
-fPIC

如果主程序为
main.f90
,则输出应为
exe
,编译命令可能:

gfortran -o main.exe module1.f90 module2.f90 main.f90
它将使用模块生成带有主文件的
exe


编辑: 下面是构建DLL的示例Makefile(针对问题):

执行后:

gfortran -g -shared -fPIC -o module1.o module1.f90
gfortran -g -shared -fPIC -o module2.o module2.f90
gfortran  -o main.dll main.f90 module1.o module2.o
它生成DLL:

20/12/2016  16:23            59.091 main.dll
也许,使用宏可以改进这个Makefile



使用gfortran 6.2.0版(x86_64-posix-seh-rev0,由MinGW-W64项目构建)进行测试。

始终使用tag fortran。如果需要,为特定版本附加另一个标记(不在此)。您想要什么?为什么你不能在帖子末尾使用命令?你试过什么吗?你已经有Makefile了吗?我希望有一个Makefile可以帮我完成这项工作,而不必在命令行中编写它。我已经尝试过这个命令,它确实有效,不,我没有makefile Aleadyy你应该阅读一些教程或示例,然后自己尝试一下。我已经尝试过了,但没有一个包括将它转换为dllAlways use tag fortran。如果需要,为特定版本附加另一个标记(不在此)。您想要什么?为什么你不能在帖子末尾使用命令?你试过什么吗?你已经有Makefile了吗?我希望有一个Makefile可以帮我完成这项工作,而不必在命令行中编写它。我试过这个命令,但它确实有效,不,我没有生成文件Aleadyy你应该阅读一些教程或示例,然后自己尝试一下。我有,但没有一个包括将其转换为DLL。这是关于生成文件的吗?使用.f08后缀不是一个好主意。谢谢,我这样做了,但我的问题是让一个makefile为我做它,而不是写它myself@Cleo我用一个例子编辑了答案。我希望这能有所帮助:)@VladimirF我对Fortran比较陌生。请你给我指出一些链接,解释为什么使用.f08不是一个好主意?我认为(可能是错的)最好使用最新版本的语言/扩展。谢谢一些常见的编译器甚至无法识别f08。f90实际上是自由形式的标准。对于C和C++,你也不使用.c99、c11或.cpp14。使用.f08后缀不是一个好主意。谢谢,我这样做了,但我的问题是让一个makefile为我做它,而不是写它myself@Cleo我用一个例子编辑了答案。我希望这能有所帮助:)@VladimirF我对Fortran比较陌生。请你给我指出一些链接,解释为什么使用.f08不是一个好主意?我认为(可能是错的)最好使用最新版本的语言/扩展。谢谢一些常见的编译器甚至无法识别f08。f90实际上是自由形式的标准。对于C和C++,您也不使用.c99 .c11或.cpp14。