Makefile 中的 BlockSolve.o 错误

Makefile 中的 BlockSolve.o 错误

我正在尝试运行 Enzo Project 模拟,并按照网站上列出的步骤进行操作:https://enzo.readthedocs.io/en/latest/user_guide/bootcamp.html。我收到了一个错误,谷歌搜索并没有揭示我到底出了什么问题。这是我收到的错误:

Compiling BlockSolve.F
gfortran  -c -o BlockSolve.o -fno-second-

underscore -m64 -g -DLINUX -DH5_USE_16_API   -D__max_subgrids=100000 -D__max_baryons=30 -D__max_cpu_per_node=8 -D__memory_pool_size=100000 -DINITS64 -DLARGE_INTS -DCONFIG_PINT_8 -DIO_32    -DUSE_MPI   -DCONFIG_PFLOAT_8 -DCONFIG_BFLOAT_8  -DUSE_HDF5_GROUPS   -DTRANSFER   -DNEW_GRID_IO -DFAST_SIB      -DENZO_PERFORMANCE    -DUSE_UUID -DSAB BlockSolve.F
    
BlockSolve.F:1070:11:

 1070 |       NB = ILAENV( 1, 'UGETRF', ' ', M, N, -1, -1 )
      |           1
Error: Type mismatch in argument 'ispec' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:1070:11:

 1070 |       NB = ILAENV( 1, 'UGETRF', ' ', M, N, -1, -1 )
      |           1
Error: Type mismatch in argument 'n3' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:1070:11:

 1070 |       NB = ILAENV( 1, 'UGETRF', ' ', M, N, -1, -1 )
      |           1
Error: Type mismatch in argument 'n4' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:932:30:

  932 |          JP = J - 1 + e_idamax( M-J+1, A( J, J ), 1 )
      |                              1
Error: Type mismatch in argument 'incx' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:2628:18:

 2628 |          ILAENV = IEEECK( 0, 0._RKIND, 1._RKIND )
      |                  1
Error: Type mismatch in argument 'ispec' at (1); passed INTEGER(4) to INTEGER(8)
BlockSolve.F:2639:18:

 2639 |          ILAENV = IEEECK( 1, 0._RKIND, 1._RKIND )
      |                  1
Error: Type mismatch in argument 'ispec' at (1); passed INTEGER(4) to INTEGER(8)

make: *** [BlockSolve.o] Error 1

答案1

这不是 Makefile 错误。制作行为正确:它已停止构建,因为您的 BlockSolve.F Fortran 源代码中有 6 个语言错误(第 1070 行有 3 个错误,第 932、2628 和 2639 行各有一个)。

修复编译时错误,make 将继续下一阶段。

所有错误都与将 INT(4) 变量传递给需要 INT(8) 的函数相关。这可能是因为您下载的源代码适用于早期的 Fortran 标准,或者适用于与您的体系结构不同的体系结构。

您引用的文档实际上指出“这会导致不匹配:虽然 C/C++ 代码始终具有正确的位宽,但 Fortran 代码必须正确设置这些变量以确保正确的位宽。”并指出有四个变量需要正确设置(例如 MACH_FFLAGS_INTEGER_64),并且为不同的体系结构和操作系统提供了多个 makefile。

该文档还提供了一个论坛的链接enzo-users来帮助解决此类问题。

相关内容