如何从Makefile中创建DLL文件,其中文件是用Fortran编写的? 我正在使用Windows,但在Linux系统下编译它并不是一个问题。
我有两个模块和一个使用这些模块的文件。 通常情况下,我会写下以下内容来制作我想要的内容:
gfortran module1.f90 module2.f90 main.f90 -o main.dll
答案 0 :(得分:0)
如果module1.f90
和module2.f90
只是模块而你想创建一个dll,你可以使用以下命令:
gfortran -o main.dll module1.f90 module2.f90 -shared -fPIC -lgfortran
它将生成一个可以在以后由主程序加载的dll。
此处生成lib的主要标志是-shared
和-fPIC
。
如果main.f90
是主程序,则输出应为exe
,编译命令可能为:
gfortran -o main.exe module1.f90 module2.f90 main.f90
它将使用模块生成主文件exe
。
这里是一个构建DLL的示例Makefile(针对问题):
FC=gfortran
FFLAGS=-g -shared -fPIC
LDFLAGS=-lgfortran
main.dll: main.f90 module1.o module2.o
$(FC) $(LDFLAGS) -o $@ $?
module1.o: module1.f90
$(FC) $(FFLAGS) -o $@ $?
module2.o: module2.f90
$(FC) $(FFLAGS) -o $@ $?
clean:
rm -f *.o *.exe *.dll
执行后:
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。
HTH
使用gfortran版本6.2.0(x86_64-posix-seh-rev0,由MinGW-W64项目构建)测试