• ベストアンサー

Fortranについて教えてください

Fortran90で書かれた、又はこれから書く、プログラム実行したく GCCのgfortranをインストールしました。OSは、Windows XPです。 ところが、コンパイルのところで、つまずいてなかなか進みません。 (gfortranは動いてますので、インストールに問題はないと思います。) そこで、gfortranについて(オプション等)、解説しているサイトや文献を教えて頂きたいと思います。 英語力があまり無いので、日本語のものを紹介いただけると助かります。 また、十数年ぶりのフォートランですので(現在はVBAしか触っていません)、初学者向けだと、なお助かります。 どうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.6

#3です。確認しました。確かに Fortran 95コンパイラのようですね。ただ、 GNU Fortran 95 (GCC) 4.2.0 20060504 (experimental) Copyright (C) 2006 Free Software Foundation, Inc. とありますし、webページを見てもまだ開発段階の初期のものとみなされて いるようなので誰もが問題なく使えるものではなく、ドキュメントも整備されている途上ですから、この時点で日本語に訳したものとか初学者向けを期待するのは少々無理があるかと。 ただ、他の f95という名のコンパイラと同じように使えるようなのでそれ向けの解説を見たりすると良いかもしれません。 ところでgfortran はコンパイル対象のファイルの拡張子が .for だと、それは Fortran 77で書かれたものとしてみなすようですがそれは大丈夫なのですか? COMMONブロックが、includeされる方のファイル(f2.fi)に記述されているのなら、include自体はできているようです。 コンパイルしようとしているのが無償公開されているものとのことですので、エラーを起こしている最初の部分のソース数行を貼り付たりファイルの場所を教えてもらうとかは可能ですか?

参考URL:
http://www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/mr/man1/f95.1.html
OoToToO
質問者

お礼

ありがとうございます!お手数をお掛けしております。大変参考になります。 >GNU Fortran 95 (GCC) 4.2.0 20060504 (experimental) >Copyright (C) 2006 Free Software Foundation, Inc. > >とありますし、webページを見てもまだ開発段階の初期のものとみなされて そうなんですか。コンパイラの選択から考えたほうがいいかもしれませんね。あまり英語得意じゃないもので・・・、(experimental)を見逃していました。 #2様の >GCC の gfortran って, Fortran90 もコンパイルできたんでしたっけ? で、少し、いや~な予感がしたのですが。。。そういう問題もあるのですね。 >COMMONブロックが、includeされる方のファイル(f2.fi)に記述されているのなら、include自体はできているようです。 はい、COMMONがf2.fiに記述されています。#5様からお示しいただいたサンプルプログラムでも、includeを確認できました。 >コンパイルしようとしているのが無償公開されているものとのことですので、エラーを起こしている最初の部分のソース数行を貼り付たりファイルの場所を教えてもらうとかは可能ですか? プログラムの説明には、「公開(無料)」「プログラムの書き換え自由」と書いているのですが・・・、入手窓口が公開されていませんので、申し訳ございませんが、私の判断でお知らせする訳にはいかないと思います。恐れ入ります。

すると、全ての回答が全文表示されます。

その他の回答 (7)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.8

「-x f95 って付けると Fortran95 だと思ってくれる」って書いてありますね....

OoToToO
質問者

お礼

ありがとうございます。 またまた、読み落としてしまったようです。  http://gcc.gnu.org/wiki/GFortranUsage の >When gfortran is run on a file whose name ends ・・・・(省略) >・・・・For Fortran 95 this is f95. は、コンパイル時に明示的に言語を指定するためのやり方だったんですね。よく分からなくて読み飛ばしてしまっていました。ご忠告ありがとうございます。(^_^;)助かります。

すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.7

拡張子 .f でも Fortran77形式(固定書式)のソースとしてみなされます。 Fortran95形式(自由書式)のソースとして認識させたいなら、 .f95 という拡張子を使います(.f90でもよいかもしれませんが試してません)。

OoToToO
質問者

お礼

ありがとうございます。 今回調べてみて、フォートランの自由書式というのをはじめて知りました。 ただ、現在動かそうとしているプログラムは、「6カラム+コード」という、私が知っているf77の書き方と同じです。 そして、GCCのgfortranのホームページ  http://gcc.gnu.org/wiki/GFortranUsage にて >Since Fortran 95 allows for two different kinds of input source forms ・・・ とあって、 >1.Files whose name ends in .f or .for are assumed to be fixed form >2.Files whose name end in .f90 or .f95 are assumed to to be free form なるコメントを見つけましたので、今回のプログラムの場合では「.f」または「.for」でも良いのかなぁと解釈しました。(私の英語力では、またまた見逃しがあるかもしれませんが・・・)

すると、全ての回答が全文表示されます。
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.5

>「f1.for」ソースコード内のサブルーチンごとに「include 'f2.fi'」が書かれています。 >そして、「f1.for」と「f2.FI」は同じフォルダにあります。 >・・・・ということでした。 「サブルーチンごとに」と言うのがちょっと気になりますが、includeしているのであれば、 gfortran f1.for でよいです。 gfortran f1.for f2.FI ではいけません。 エラーなしに何かコンパイル成功したことはないのでしょうか? ためしにやってみてください。ただしこのBBSは頭のスペースが取れてしまいますので、7カラムのスペースを頭につけてください。 まず、includeされるテストファイルincl.f(1行のみ) write(*,*)'include ok' 次にincludeする側のテストファイルtest.f include 'incl.f' write(*,*)'hello, world!' end これで、 gfortran test.f とやってみてください。 エラーが出るようなら、そのまま全部返信してください。

OoToToO
質問者

お礼

ありがとうございます! ご教示いただいたサンプルプログラム、無事動きましたっ! つまり、includeを使った、複数ファイルのコンパイルは、 お示しいただいた、コマンド gfortran test.f のパターンで行うということですね。 おかげ様で、ひとつ、可能性を潰すことができました。

OoToToO
質問者

補足

さてさて、 おかげ様で、ひとつ可能性を潰すことができましたが・・・ gfortran f1.for をたたいてみました。 それから、#6様のご指摘も踏まえまして、ファイルの拡張子を換えて、 gfortran f1.f をたたいてみましたが、 やっぱり、滝のようなエラーが流れていきます。 つまり、 ソースコードがエラー、又は、gfortranと合わない ということでしょうか? ちょっと気になったのは、 f2.FI のコードが、 「6カラム空白+コード」ではなく、 「タブ+コード」となっていたことです。 そこで「タブ」を「6カラム空白」に置換してコンパイルしてみたのですが、結果は同じエラーの滝です。 ここからは、ソースコードとのニラメッコになるのでしょうか? 一難さって、また一難です。 お手数ですが、ご助言いただけると幸いです。よろしくお願いします。

すると、全ての回答が全文表示されます。
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.4

>ファイルが2つありまして、f1.for と f2.FI f1.for で f2.FI をinclude しています。 >そこで、 >> gfortran -Wall s1.for s2.FI includeしているのだったら、 gfortran f1.for -o f1 だけでよいのではないでしょうか?

OoToToO
質問者

補足

ご回答ありがとうございます。 さてさて、 >gfortran f1.for -o f1 >だけでよいのではないでしょうか? たたいてみましたが、滝のようなエラーは変わらずです。 もしかして、 「f1.for で f2.FI をinclude しています。」 という私の表現がまずかったかもしれません。 正確には・・・・ 「f1.for」ソースコード内のサブルーチンごとに「include 'f2.fi'」が書かれています。 そして、「f1.for」と「f2.FI」は同じフォルダにあります。 ・・・・ということでした。 ひょっとして、includeがうまくできていないのでしょうか? 私、includeの動きがよく分かっていません。 私の理解レベルは、ファイルが複数あるときは、 「そういえば、コンパイラとかリンカとか使っていたような・・・でもどうやって使ってたかなぁ?」位しか覚えておりません。 この現象もそうですが、コマンドのオプションや使い方等について、良い情報(できるだけ日本語)があれば、それも教えていただけると助かるのですが・・・ すみません、欲張りで。どうか、よろしくお願いします。

すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

Windows XP 上で使われているとのことですが、具体的にどのパッケージのバイナリを使われていますか? ダウンロード元の場所などを教えてください。

OoToToO
質問者

補足

>ダウンロード元の場所などを教えてください。 はい、  http://gcc.gnu.org/wiki/GFortranBinaries からダウンロードしました。 ここで2種類ありますが、  mingw/"native Windows" のほうです。  (2006-05-04) とカッコ書きされたインストーラをダウンロードしました。 理由は、 「mingw/"native Windows"」と「Cygwin」の2つのうち、どっちを選んだら良いか分からない人は、「mingw/"native Windows"」がよいと書かれているようでしたので。どっちがいいか分からない私は、コッチにしました。 よろしく、お願いします。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

GCC の gfortran って, Fortran90 もコンパイルできたんでしたっけ?

OoToToO
質問者

補足

つたない英語の読解力ですが、 GCCのホームページを見て、 Fortran95まで対象にしていると解しましたが・・・ 何か問題があるのでしょうか?

すると、全ての回答が全文表示されます。
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

>ところが、コンパイルのところで、つまずいてなかなか進みません。 具体的にどう躓いているのでしょうか? g77 test.f と打つだけなので、正しくInstallされているなら、躓きようがない様に思いますが。

OoToToO
質問者

補足

>具体的にどう躓いているのでしょうか? はい、実は・・・ ファイルが2つありまして、f1.for と f2.FI f1.for で f2.FI をinclude しています。 そこで、 > gfortran -Wall s1.for s2.FI とか > gfortran -o test s1.for s2.FI とか たたきました。すると、  >Error: Syntax error in COMMON statement at (1) とか  >Error: Expected another dimension in array declaration at (1) とか  >Unexpected STATEMENT FUNCTION statement at (1) 等などのエラーが大量に、滝のように流れます。 ソースのコードがエラーなのか? ソースが他のfortran仕様なのか?(Fortran90とは書いてます。無償公開プログラムです。) gfortranの操作ミスなのか? 見当がつきませんでしたので、質問しました。 この際ですので、じっくり勉強したいとも思っておりますので、 この問題に限らずに、初学者が理解できそうな、できれば日本語で書かれたよい情報があれば、教えていただきたいと思っております。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A