質問

Fortran90で書かれた、又はこれから書く、プログラム実行したく
GCCのgfortranをインストールしました。OSは、Windows XPです。

ところが、コンパイルのところで、つまずいてなかなか進みません。
(gfortranは動いてますので、インストールに問題はないと思います。)

そこで、gfortranについて(オプション等)、解説しているサイトや文献を教えて頂きたいと思います。
英語力があまり無いので、日本語のものを紹介いただけると助かります。

また、十数年ぶりのフォートランですので(現在はVBAしか触っていません)、初学者向けだと、なお助かります。

どうか、よろしくお願いします。

通報する

回答 (8件)

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

この回答へのお礼

ありがとうございます。

またまた、読み落としてしまったようです。
 http://gcc.gnu.org/wiki/GFortranUsage

>When gfortran is run on a file whose name ends ・・・・(省略)
>・・・・For Fortran 95 this is f95.

は、コンパイル時に明示的に言語を指定するためのやり方だったんですね。よく分からなくて読み飛ばしてしまっていました。ご忠告ありがとうございます。(^_^;)助かります。

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

この回答へのお礼

ありがとうございます。

今回調べてみて、フォートランの自由書式というのをはじめて知りました。
ただ、現在動かそうとしているプログラムは、「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」でも良いのかなぁと解釈しました。(私の英語力では、またまた見逃しがあるかもしれませんが・・・)

#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自体はできているようです。

コンパイルしようとしているのが無償公開されているものとのことですので、エラーを起こしている最初の部分のソース数行を貼り付たりファイルの場所を教えてもらうとかは可能ですか?

この回答へのお礼

ありがとうございます!お手数をお掛けしております。大変参考になります。

>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を確認できました。

>コンパイルしようとしているのが無償公開されているものとのことですので、エラーを起こしている最初の部分のソース数行を貼り付たりファイルの場所を教えてもらうとかは可能ですか?
プログラムの説明には、「公開(無料)」「プログラムの書き換え自由」と書いているのですが・・・、入手窓口が公開されていませんので、申し訳ございませんが、私の判断でお知らせする訳にはいかないと思います。恐れ入ります。

>「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
とやってみてください。

エラーが出るようなら、そのまま全部返信してください。

この回答へのお礼

ありがとうございます!
ご教示いただいたサンプルプログラム、無事動きましたっ!

つまり、includeを使った、複数ファイルのコンパイルは、
お示しいただいた、コマンド
gfortran test.f
のパターンで行うということですね。

おかげ様で、ひとつ、可能性を潰すことができました。

この回答への補足

さてさて、
おかげ様で、ひとつ可能性を潰すことができましたが・・・


gfortran f1.for
をたたいてみました。

それから、#6様のご指摘も踏まえまして、ファイルの拡張子を換えて、
gfortran f1.f
をたたいてみましたが、

やっぱり、滝のようなエラーが流れていきます。



つまり、
ソースコードがエラー、又は、gfortranと合わない
ということでしょうか?

ちょっと気になったのは、
f2.FI
のコードが、
「6カラム空白+コード」ではなく、
「タブ+コード」となっていたことです。
そこで「タブ」を「6カラム空白」に置換してコンパイルしてみたのですが、結果は同じエラーの滝です。



ここからは、ソースコードとのニラメッコになるのでしょうか?
一難さって、また一難です。

お手数ですが、ご助言いただけると幸いです。よろしくお願いします。

>ファイルが2つありまして、f1.for と f2.FI
f1.for で f2.FI をinclude しています。
>そこで、
>> gfortran -Wall s1.for s2.FI

includeしているのだったら、

gfortran f1.for -o f1
だけでよいのではないでしょうか?

この回答への補足

ご回答ありがとうございます。

さてさて、
>gfortran f1.for -o f1
>だけでよいのではないでしょうか?

たたいてみましたが、滝のようなエラーは変わらずです。


もしかして、
「f1.for で f2.FI をinclude しています。」
という私の表現がまずかったかもしれません。

正確には・・・・
「f1.for」ソースコード内のサブルーチンごとに「include 'f2.fi'」が書かれています。
そして、「f1.for」と「f2.FI」は同じフォルダにあります。
・・・・ということでした。

ひょっとして、includeがうまくできていないのでしょうか?


私、includeの動きがよく分かっていません。
私の理解レベルは、ファイルが複数あるときは、
「そういえば、コンパイラとかリンカとか使っていたような・・・でもどうやって使ってたかなぁ?」位しか覚えておりません。

この現象もそうですが、コマンドのオプションや使い方等について、良い情報(できるだけ日本語)があれば、それも教えていただけると助かるのですが・・・
すみません、欲張りで。どうか、よろしくお願いします。

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

この回答への補足

>ダウンロード元の場所などを教えてください。

はい、
 http://gcc.gnu.org/wiki/GFortranBinaries
からダウンロードしました。
ここで2種類ありますが、

 mingw/"native Windows"
のほうです。
 (2006-05-04)
とカッコ書きされたインストーラをダウンロードしました。

理由は、
「mingw/"native Windows"」と「Cygwin」の2つのうち、どっちを選んだら良いか分からない人は、「mingw/"native Windows"」がよいと書かれているようでしたので。どっちがいいか分からない私は、コッチにしました。

よろしく、お願いします。

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

この回答への補足

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

>ところが、コンパイルのところで、つまずいてなかなか進みません。

具体的にどう躓いているのでしょうか?
g77 test.f
と打つだけなので、正しくInstallされているなら、躓きようがない様に思いますが。

この回答への補足

>具体的にどう躓いているのでしょうか?

はい、実は・・・
ファイルが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は役に立ちましたか?3 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集