DISLIN 库,"dislin.mod" 不是 Fortran 文件

DISLIN library, "dislin.mod" is not a Fortran file

好吧,我刚刚安装了 DISLIN,因为我必须将它与 Fortran 和 MPI 一起使用。 但是当我尝试 运行:

mpif90 -I/usr/local/dislin/ifc/ -L/usr/local/dislin -ldislin 3-life_parallelo.f90 -o life

但它总是回复我

USE DISLIN 1 Fatal Error: File 'dislin.mod' opened at (1) is not a GNU Fortran module file

我不知道该怎么办.. 在 /ifc 文件夹中我有 2 个文件:dislin.f90 和 dislin.mod,最后一个是 Audio Amiga SoundTracker (audio/x-mod) 文件类型.所以..我需要一个 dislin.mod fortran 文件..我必须像 "dislin.mod.f90" 一样保存它吗?我不这么认为。

更新(Dislin 库用 gfortran 重新编译,我重新运行 "mpif90 .." 见上文)

/tmp/ccm8YsO3.o: nella funzione "showgrid_":
3-life_parallelo.f90:(.text+0x39f): undefined reference to "getlev_"
3-life_parallelo.f90:(.text+0x3b9): undefined reference to "metafl_"
3-life_parallelo.f90:(.text+0x3f0): undefined reference to "page_"
3-life_parallelo.f90:(.text+0x3f5): undefined reference to "disini_"
3-life_parallelo.f90:(.text+0x3fa): undefined reference to "pagera_"
3-life_parallelo.f90:(.text+0x3ff): undefined reference to "nobar_"
3-life_parallelo.f90:(.text+0x404): undefined reference to "intax_"
3-life_parallelo.f90:(.text+0x438): undefined reference to "setgrf_"
3-life_parallelo.f90:(.text+0x46d): undefined reference to "autres_"
3-life_parallelo.f90:(.text+0x4c7): undefined reference to "graf3_"
3-life_parallelo.f90:(.text+0x4db): undefined reference to "ticks_"
3-life_parallelo.f90:(.text+0x4e0): undefined reference to "cross_"
3-life_parallelo.f90:(.text+0x529): undefined reference to "crvmat_"
3-life_parallelo.f90:(.text+0x52e): undefined reference to "endgrf_"
3-life_parallelo.f90:(.text+0x56d): undefined reference to "dwgmsg_"
collect2: error: ld returned 1 exit status

我是如何编译的dislin.mod

cd /usr/local/dislin/gf/: sudo gfortran -c dislin.f90
cd real64: sudo gfortran -c dislin.f90

我如何使用 dislin 库

SUBROUTINE showgrid( griglia, numx, numy, nloop )
 USE DISLIN
 IMPLICIT NONE

 INTEGER, INTENT(IN) :: griglia(numx,numy)
 INTEGER, INTENT(IN) :: numx, numy
 INTEGER, INTENT(IN) :: nloop

 REAL :: extgrid(0:numx+1,0:numy+1)
 INTEGER :: nlev
 CHARACTER(5) :: sloop

 IF ( MAXVAL(griglia)>1 .OR. MINVAL(griglia)<0 ) THEN
  STOP "ERRORE: gli elementi della matrice devono essere 1 o 0"
 END IF

 extgrid( 0 , : )= -1
 extgrid( numx+1 , : )= -1
 extgrid( : , 0 )= -1
 extgrid( : , numy+1 )= -1
 extgrid(1:numx,1:numy)= REAL(griglia(:,:))

 WRITE(UNIT=sloop, FMT='(I4)') nloop

 CALL GETLEV(nlev)
 IF (nlev == 0) THEN
  CALL METAFL('XWIN')
  CALL PAGE(200*numx, 200*numy)
  CALL DISINI()
  CALL PAGERA()
  CALL NOBAR()
  CALL INTAX()
  CALL SETGRF ("NONE", "NONE", "NONE", "NONE")
  CALL AUTRES( (numx+2)*2, (numy+2)*2)
 END IF

 CALL GRAF3(-1., 1., -1., 1., -1., 1., -1., 1., 0., 1., 0., 1.)
 CALL TICKS (0, "XYZ")
 CALL CROSS()
 CALL CRVMAT(extgrid, numx+2, numy+2, 1, 1)
 CALL ENDGRF()


 CALL DWGMSG("Generazione numero"//sloop)

END SUBROUTINE showgrid

更新(运行 mpif90 与 gfortran,dislin.mod 由 gfortran 编译)

Cannot read module file 'dislin.mod' opened at (1), because it was created by a different version of GNU Fortran

"gfortran --version" 和 "mpif90 --version" returns 我都是 4.8.2

mpif90 -v

mpif90 for MPICH version 3.0.4
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
...
gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

dislin.mod 是对的。它不是 Amiga 声音文件——尽管您的系统报告它是这样的。它是一个Fortran模块文件,里面存放着你编译的模块中包含的变量和过程的信息。

但是,您似乎使用不同的编译器编译 DISLIN,而不是 mpif90 背后的编译器。根据错误信息,你的 mpif90 是 gfortran。您显然使用了不同的编译器进行安装。

由于.mod不同编译器生成的文件不兼容,所以无法运行。即使是同一个编译器的不同版本也经常会导致问题。您必须确保使用您打算稍后使用的相同编译器安装该库。

如果您使用预编译版本,则只能将其与为其准备的编译器一起使用。


在您的新问题中,您似乎没有正确 link 库。您必须在包含缺失符号的库中 link。您应该始终显示产生任何错误消息的命令,单独的消息通常是无用的。