代码之家  ›  专栏  ›  技术社区  ›  Andy

F77:用g77编译一个通常用Absoft编译器编译的程序的问题

  •  3
  • Andy  · 技术社区  · 14 年前

    我不是一个Fortran程序员(只是一个短暂的经验),但我需要编译一个部分用Fortran编写的程序 F77 . 有人用 Absoft 编译器,但现在我需要在另一台机器上用 g77

    f77 -f  -w -O -B100 -B108 -c *.f
    mv *.f flib && mv *.o olib
    f77  -B100 -o runme olib/*.o clib/*.o -L/usr/X11R6/lib64 -L/usr/X11R6/lib -lX11 -L$PVM_ROOT/lib/$PVM_ARCH  -lfpvm3 -lpvm3 -L$ABSOFT/lib -lU77
    

    我把这些台词改成

    g77   -w -O -B100 -B108 -c *.f
    mv *.f flib && mv *.o olib
    g77  -B100 -o runme olib/*.o clib/*.o -L/usr/X11R6/lib64 -L/usr/X11R6/lib -lX11 -L$PVM_ROOT/lib/$PVM_ARCH  -lfpvm3 -lpvm3  -lgfortran -lgfortranbegin
    

    somefile.f:(.text+0x93): undefined reference to `for_open'
    somefile.f:(.text+0xf4): undefined reference to `for_write_seq_fmt'
    somefile.f:(.text+0x128): undefined reference to `for_write_seq_fmt_xmit'
    somefile.f:(.text+0x454): undefined reference to `for_read_seq'
    


    更新1

    -libifcore 到最后一行(链接器)的末尾,然后

    /usr/bin/ld: cannot find -libifcore
    

    $ find /opt/intel/* -name 'libifcore*'
    /opt/intel/fce/9.1.036/lib/libifcore.a
    /opt/intel/fce/9.1.036/lib/libifcore.so
    /opt/intel/fce/9.1.036/lib/libifcore.so.5
    /opt/intel/fce/9.1.036/lib/libifcore_pic.a
    /opt/intel/fce/9.1.036/lib/libifcoremt.a
    /opt/intel/fce/9.1.036/lib/libifcoremt.so
    /opt/intel/fce/9.1.036/lib/libifcoremt.so.5
    /opt/intel/fce/9.1.036/lib/libifcoremt_pic.a
    

    但即使我在源目录中执行以下操作

    $ export PATH=$PATH:/opt/intel/fce/9.1.036/lib/
    $ ln -s /opt/intel/fce/9.1.036/lib/libifcore.so
    

    找不到。

    How to pass -libm to MPICC? libimf.so: warning: feupdateenv is not implemented and will always fail

    $ echo $LD_LIBRARY_PATH
    /opt/intel/fce/9.1.036/lib:/opt/intel/cce/9.1.042/lib:/usr/local/lib/openmpi:/usr/local/lib:/usr/lib:
    
    5 回复  |  直到 7 年前
        1
  •  2
  •   dmckee --- ex-moderator kitten    14 年前

    Absolft接受了Fortran 77的扩展版本,但该版本与77国集团接受的Fortran 77的扩展版本不完全兼容。

    所以不能保证你 可以 在不编辑代码的情况下执行此操作。我似乎记得Absoft编译器接受了一种方便的初始化语法,这是77国集团无法复制的。

        2
  •  1
  •   M. S. B.    14 年前

    如果要编译;使用g77链接,最简单的方法是使用命令“g77”(f77在您的计算机上调用什么编译器?尝试“f77-v”或类似的方法来找出……)它应该会自动找到g77fortran特定的库。您不需要显式链接到Fortran库,尤其不需要链接到gfortran的库,gfortran是一个不同的编译器。您还可以编译;链接到gfortran——它可能会识别出源代码是fortran77,如果文件的文件类型正确,就可以进行适当的编译,否则就必须使用选项——对于这个编译器,请使用命令“gfortran”。

    稍后编辑:

    C234567
          write (6, *) "Hello World"
          stop
          end
    

    尝试此命令:

    通过以下方式运行:

    ./垃圾.exe

        3
  •  1
  •   deinst    14 年前

    看起来你想和 libifcore .

    编辑: 您可以通过添加 gcc tutorial

    通常,编译器选项-lNAME将尝试将对象文件与标准库目录中的库文件libNAME.a链接。

        4
  •  1
  •   f.jamitzky    14 年前

    你为什么用77国集团而不是gfortran?

    您可以将openmp与gfortran编译器一起使用,当您希望像ifort编译器那样使用向量模式时,必须在编译器选项中显式指定sse。

        5
  •  0
  •   Andy    14 年前

    似乎问题出在一个源文件中的错误,这对Absoft编译器来说不是什么大问题。 g77

    ifort ,该文件的编译被中止,但编译了其他文件并创建了二进制文件。

    fortcom: Error: somefile.f, line 703: An extra comma appears in the format list.   [)]
         & (1p5e12.3,5h  ...,))                                             
    -------------------------^
    compilation aborted for somefile.f (code 1)
    

    当我去掉多余的逗号时,两个编译器都编译了所有内容并创建了二进制文件

    然后,当我尝试运行这两个二进制文件时,intelcomiler制作的一个运行良好,但是 77国集团

    所以现在原来的问题解决了,但是代码没有在多处理模式下运行,所以二进制文件对我来说很不幸是无用的。