首先让我说我不是超级用户,在这里有点菜鸟,但我对我在做什么有一个基本的了解。
我已经按照此处的说明安装了 MSYS2 和 MinGW-w64 。我正在使用 64 位 Windows 10,我想最终在我的 Fortran 90 代码中使用ARPACK库。我目前正在使用 Microsoft Visual Studio 2017 和 Intel Fortran ifort 编译器和 MKL 库。所以,
1.我应该用gfortran
or编译 ARPACK 还是ifort
没关系?
附录:编译ifort
似乎让人头疼,特别是因为ARmake.inc
文件中引用的命令是 unix 命令,所以我需要用我不太熟悉的 Windows 等效命令替换它们(例如ln -s
-> mklink
)
我已将 ARPACK 源文件提取到/c/ARPACK
,并更新了ARmake.inc
文件,更改了以下内容:
home = /c/ARPACK
PLAT = x64
FC = gfortran
我也进入/UTIL/second.f
文件并删除了该行EXTERNAL ETIME()
。
2.我应该设置PLAT = x86_64
吗?我不明白究竟是如何make
工作的,所以我不知道这个设置到底会影响什么。我make
在mingw64
shell 中运行(从/msys64
文件夹运行)。
接下来,我运行make lib
. 我收到了许多警告,特别是在编译时snrm2.f
,dnrm2.f
我收到了同样的错误:
snrm2.f:56:72:
10 assign 30 to next
1
Warning: Deleted feature: ASSIGN statement at (1)
snrm2.f:62:19:
20 go to next,(30, 50, 70, 110)
1
Warning: Deleted feature: Assigned GOTO statement at (1)
snrm2.f:64:72:
assign 50 to next
1
Warning: Deleted feature: ASSIGN statement at (1)
snrm2.f:73:72:
assign 70 to next
1
Warning: Deleted feature: ASSIGN statement at (1)
snrm2.f:79:72:
assign 110 to next
1
Warning: Deleted feature: ASSIGN statement at (1)
3.这些警告重要吗?我对 Fortran 77 的了解非常少,而且我并没有努力去理解它们。
此外,每次它进入一个新文件夹时,我都会得到(例如)
make[1]: Leaving directory '/c/ARPACK/BLAS'
Making lib in /c/ARPACK/LAPACK
make[1]: Entering directory '/c/ARPACK/LAPACK'
Makefile:91: warning: overriding recipe for target '.f.o'
../ARmake.inc:95: warning: ignoring old recipe for target '.f.o'
gfortran -O -c sgeqr2.f
gfortran -O -c slabad.f
gfortran -O -c slacon.f
.....
ARmake.inc
文件在哪里
90 # %-------------------------------------------%
91 # | Command to build .o files from .f files. |
92 # %-------------------------------------------%
93 #
94 .f.o:
95 @$(ECHO) Making $@ from $<
96 @$(FC) -c $(FFLAGS) $<
4.这个警告/错误信息重要吗?我的理解是这应该打印例如
Making sgeqr2.o from sgeqr2.f
gfortran -O -c sgeqr2.f
但make
不喜欢这里有两个命令,并且用第二个覆盖第一个。
最后总结一下,在我继续之前,我注意到并非每个源.f
文件都已编译。例如,在 中/BLAS
,我有cgemm.f
、ctbsv.f
、ctrsm.f
、dgemm.f
和其他一些没有关联文件的.o
文件。为什么这些被遗漏了?例如,我知道这dgemm
是一个非常基本的矩阵乘法例程,我认为这是必不可少的,所以我假设沿线某处出现错误,但在此make
过程中我从未看到任何错误消息。任何和所有的帮助表示赞赏,经过许多小时的尝试让它发挥作用,我觉得结局(希望)就在眼前。所以我最后也是最重要的问题
5.为什么有些源文件没有编译,这是否会导致生成的库无法使用?如果是这样,我可以做些什么不同的事情,或者我需要做什么来完成图书馆的建设?
我意识到个人Makefile
提到 ARPACK 不需要这些文件,但 ARPACK 示例需要这些文件。它们可以通过使用来包含,make all
而不是make lib
.