0

首先让我说我不是超级用户,在这里有点菜鸟,但我对我在做什么有一个基本的了解。

我已经按照此处的说明安装了 MSYS2 和 MinGW-w64 。我正在使用 64 位 Windows 10,我想最终在我的 Fortran 90 代码中使用ARPACK库。我目前正在使用 Microsoft Visual Studio 2017 和 Intel Fortran ifort 编译器和 MKL 库。所以,

1.我应该用gfortranor编译 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工作的,所以我不知道这个设置到底会影响什么。我makemingw64shell 中运行(从/msys64文件夹运行)。

接下来,我运行make lib. 我收到了许多警告,特别是在编译时snrm2.fdnrm2.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.fctbsv.fctrsm.fdgemm.f和其他一些没有关联文件的.o文件。为什么这些被遗漏了?例如,我知道这dgemm是一个非常基本的矩阵乘法例程,我认为这是必不可少的,所以我假设沿线某处出现错误,但在此make过程中我从未看到任何错误消息。任何和所有的帮助表示赞赏,经过许多小时的尝试让它发挥作用,我觉得结局(希望)就在眼前。所以我最后也是最重要的问题

5.为什么有些源文件没有编译,这是否会导致生成的库无法使用?如果是这样,我可以做些什么不同的事情,或者我需要做什么来完成图书馆的建设?

我意识到个人Makefile提到 ARPACK 不需要这些文件,但 ARPACK 示例需要这些文件。它们可以通过使用来包含,make all而不是make lib.

4

0 回答 0