3

私はFortranプログラマーではありませんが(ほんの短い経験です)、部分的にで書かれたプログラムをコンパイルする必要がありますF77。誰かがAbsoft私の前にコンパイラでコンパイルしましたが、今度は。を使用して別のマシンで手順を繰り返す必要がありますg77。Absoftの場合、makefileには

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'

どうすればこれを修正できますか?


UPDATE1

-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

見つかりません。

さらに、別の問題が発生するのと同じマシンです-libmをMPICCに渡す方法は?libimf.so:警告:feupdateenvは実装されておらず、常に失敗します

コンパイラは必要に応じてライブラリを見つける必要があるようです

$ 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:
4

5 に答える 5

2

Absoftは、g77で受け入れられたFortran77の拡張バージョンと完全には互換性のないFortran77の拡張バージョンを受け入れました。

したがって、コードを編集せずにこれを実行できるという保証はありません。Absoftコンパイラがg77では複製できない便利な初期化構文を受け入れたことを思い出しているようです。

于 2010-07-29T18:31:36.437 に答える
1

とリンクしようとしているようですlibifcore

編集: コンパイラオプションに「-lifcore」を追加することで、このライブラリを含めることができます。gccチュートリアルを引用するには

一般に、コンパイラオプション-lNAMEは、オブジェクトファイルを標準ライブラリディレクトリ内のライブラリファイル「libNAME.a」にリンクしようとします。

于 2010-07-29T18:24:02.673 に答える
1

g77を使用してコンパイルおよびリンクする場合、最も簡単な方法はコマンド「g77」を使用することです。(f77はコンピュータでどのコンパイラを呼び出しますか?「f77-v」などを試して調べてください...)g77Fortran固有のライブラリが自動的に検出されます。Fortranライブラリに明示的にリンクする必要はありません。特に、別のコンパイラであるgfortranのライブラリにリンクする必要はありません。コンパイルしてgfortranとリンクすることもできます。おそらく、ソースコードがFortran 77であると認識し、ファイルのファイルタイプが正しい場合は適切にコンパイルします。そうでない場合は、オプションを使用する必要があります。このコンパイラでは、コマンド「」を使用します。 gfortran」。

g77とgfortranを使用すると、Intelライブラリは必要ありません。おそらくf77は、コンピューター上のIntelコンパイラーであるifortに接続されていますか?

後で編集:

最初にもっと簡単なことを試して、セットアップをテストすることをお勧めします。

このFORTRAN77プログラムをファイル「junk.f」として試してください

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

次のコマンドを試してください。

g77 junk.f -o junk.exe

次の方法で実行します。

./junk.exe

これにより、g77が機能しているかどうかがテストされます。

于 2010-07-29T21:57:11.440 に答える
1

なぜgfortranではなくg77を使用するのですか?マルチプロセッシングとはどういう意味ですか?openmpまたはベクトル化?

openmpはgfortranコンパイラーで使用でき、ifortコンパイラーのようにベクトルモードを使用する場合は、コンパイラーオプションでsseを明示的に指定する必要があります。

于 2010-08-15T16:29:08.790 に答える
0

問題はソースファイルの1つにあるエラーにあるようですが、これは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)

余分なコンマを削除すると、両方のコンパイラがすべてをコンパイルしてバイナリを作成しましたifortが、いくつかの警告が表示されました。

次に、両方のバイナリを実行しようとすると、Intel comilerで作成されたものは正常に機能していましたが、1つg77は非常に奇妙な動作をしていて、私が望んでいたことを実際には実行しませんでした。

これで元の問題は解決されましたが、コードはマルチプロセッシングモードで実行されないため、残念ながらバイナリは私には役に立ちません。

于 2010-07-30T11:24:19.803 に答える