0

Windowsでは(exeとして)動作するがOS Xでは動作しない新しいJavaコードで古いFORTRANコードを使用しようとしています.Eclipseでビルドしようとすると、

make: *** [all] Segmentation fault: 11

だから私は端末に行き、そのようにします。異なるコンパイラでも同じ結果になります:

標準の -c および -o コマンドで作成された OS X 10.7.5 および gfortran-4.2 の実行

Program foo
open(unit = 1, file = 'variables.txt',IOSTAT= iost)
    write(*,*)iost
    read(1,*) P
    write(*,*)P
...
end program foo

プログラムは手動でビルドされますが、出力は次のとおりです。

0
At line 13 of file Cubic42.f
Fortran runtime error: End of file

このエラーも見ました:

list in: end of file
apparent state: unit 88 named variables
last format: list io
lately reading sequential formatted external IO
Abort

IOSTAT が 0 を返すことを示しています。これは、ファイルが正常であることを意味します。しかし、unit# を 88.. に変更しても、CR を mac、windows、または unix に変更しても、ファイルは読み取られません。

たとえば、プログラムが機能するように変数をハードコードすると、入出力の問題だけのようです。

これを修正する方法についてのアイデアはありますか? 前もって感謝します。

Edit1 ここに variables.txt ファイルがあります

-9999
15.6
500
150.9
48.98
0.000

最後にキャリッジ リターンがあり、-9999 をプラスに変更しても問題ありません

編集2

ディレクトリからテキスト ファイルを削除し、.f を次のように作り直しました。

program foo
   implicit none
    real a, b, c, d
   open(unit = 1, file = 'variables.2txt', action='write')
   write(1, *) -6666
   write(1, *) 6.15
    write(1, *) -321
    write(1, *) 5.16
   close(1)

    open(unit = 2, file = 'variables.2txt', action='read',form='FORMATTED')
    read(2, *) a
            write(*,*) a
    read(2, *) b
            write(*,*) b
    read(2, *) c
            write(*,*) c
    read(2, *) d
            write(*,*) d
    close(2)

end program foo

それから私はそれをコンパイルしました。
出力は次のとおりです。

  -6666.000    
   6.150000    
  -321.0000    
   5.160000 

予想通りですが、variables.2txt はどこにも見つかりません! 私は非常に混乱しています、助けてください。

Edit3 ファントムファイルを見つけました。/users/me/phantom.txt にあります。問題は、ファイルを実行可能ファイルと同じディレクトリに保存するにはどうすればよいかということです。

4

1 に答える 1

1

あなたと非常によく似たエラーメッセージが表示されます

           0
At line 4 of file proba.f (unit = 1, file = 'variables.txt')

variables.txt古いMAC規則に従って行末文字を明示的に設定したファイルを使用してLinuxでコードを実行する場合^M(Unixの代わりに^J)。つまり、これは EOL 規則の問題だと思います。最終的には、ファイルに 2 行を書き込んでそのファイルを調査し、システムで gfortran が期待する EOL 規則を決定することができます。

program foo
  implicit none
  open(unit = 1, file = 'variables.txt', action='write')
  write(1, *) -9999
  write(1, *) 15.6
  close(1)
end program foo

また、私は間違いなく最新の gfortran コンパイラを使用します (現在の安定版はバージョン 4.7.2 です)。

于 2013-03-10T15:49:31.797 に答える