嗯,我刚刚安装了DISLIN,因为我必须将它与Fortran和MPI一起使用。 但是当我尝试跑步时:
mpif90 -I/usr/local/dislin/ifc/ -L/usr/local/dislin -ldislin 3-life_parallelo.f90 -o life
但它总是回复我
使用DISLIN 1致命错误:文件' dislin.mod'在(1)打开不是GNU Fortran模块文件
我不知道该怎么做..在/ ifc文件夹中我有2个文件:dislin.f90和dislin.mod,最后一个是Audio Amiga SoundTracker(audio / x-mod)文件类型。所以..我需要一个dislin.mod fortran文件..我必须保存它像" dislin.mod.f90"?我不这么认为。
UPDATE(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 lib
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
UPDATE(用gfortran运行mpif90,由gfortran编译dislin.mod)
无法读取模块文件&#39; dislin.mod&#39;在(1)打开,因为它是 由不同版本的GNU Fortran创建
&#34; gfortran --version&#34;和&#34; mpif90 - 版本&#34;让我回报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)
答案 0 :(得分:1)
dislin.mod
是正确的。它甚至不是Amiga声音文件 - 尽管您的系统会报告它。它是一个Fortran模块文件,有关您编译的模块中包含的变量和过程的信息存储在那里。
但是,您似乎使用与mpif90
后面的编译器不同的编译器编译DISLIN。根据错误消息,您的mpif90
是gfortran。您显然使用了不同的编译器进行安装。
由于不同编译器生成的.mod
文件不兼容,因此无效。即使是同一编译器的不同版本也经常会导致问题。您必须确保使用您打算稍后使用的相同编译器安装库。
如果使用预编译版本,则只能将其与编写它的编译器一起使用。
在您的新问题中,您似乎没有正确链接库。您必须链接包含缺失符号的库。您应该始终显示产生任何错误消息的命令,单独的消息通常是无用的。