▼スレッド
│
└◇2066:g77 [とちろー] 04/07 15:16
├◇2071:Re:g77 [prt] 04/08
├◇2072:Re:g77 [通りすが] 04/08
└◇2074:Re:g77 [discypu] 04/09
└◇2076:ありがとうございます [とちろー] 04/09
└◇2077:Re:g77 (PROGRAM >> _MAIN__) [nil] 04/09 <
私は、cygwin_NT5.0を使用しています。Fortran77のファイルをコンパイルしたいのですが、スレッド一覧
g77 *.f
としても以下のエラーメッセージがでてコンパイルできていません。f77としても同様。
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.1/../../../libfrtbegin.a(frtbegin.o)(.text+0x3e):main.c: undefined reference to ` _MIAN_'
collect2: ld returned 1 exit status
g77 -o test -O3 *.fとしてもだめで、最終的にfファイルを全部つなげてもだめでした。
fソース自体がだめなのかとも思いましたが、他人のPCでは上記コマンドでコンパイルできました。どなたかわかるかたいらっしゃいましたら教えてください。お願いいたします。cygwin自体はフルインストールしています。
私はプログラミングのことは(ことも)良くわかっておりませんが,スレッド一覧
どのようなソースなのかわからなくては,
プログラミングに詳しい人でもご返事しにくいのではないかと
想像しますが,いかがでしょうか.
以下素人の推測です.
g77 -c *.f
としてコンパイルし,出来たオブジェクトファイルを一つ一つ記述して
1行で
g77 -o test hoge1.o hoge2.o ..... hogeN.o
とリンクしてやれば出来る/どこが悪いかもう少しはっきりしたエラーがでる
と勝手に思っております.
とんだ勘違いかもしれません.
その場合は平にご容赦ください.
Fortranは不勉強なので間違っているかも知れませんがスレッド一覧
エラーメッセージにある「_MIAN_」が写し間違いではなく、
コピー&ペーストしたものであるならば、
「MAIN」と書くべきところを「
MIAN」と書いてしまっているのではないでしょうか?
・cygwinとg77のバージョンが不明。スレッド一覧
「cygwin_NT5.0」のは「cygwin」を NT5.0=「Windows 2000」で使っていることを
示しています。肝心のcygwinと、g77のバージョンは示すべきでしょう。
例えば次のコマンドを実行すればわかります。
$ uname -a
$ cygcheck -c cygwin gcc-g77
$ g77 --version
また、この掲示板の上のリンクの「HOME」の「質問前に読んで欲しいFAQ」も
読んでみてください。
・「undefined reference」について
| /usr/lib/gcc-lib/i686-pc-cygwin/3.3.1/../../../libfrtbegin.a(frtbegin.o)
| (.text+0x3e):main.c: undefined reference to ` _MIAN_'
念のため、手元でfrtbegin.oの内容を調べましたが、「_MIAN_」ってエントリは
見あたりませんでした。
$ ar x /usr/lib/gcc-lib/i686-pc-cygwin/3.3.1/../../../libfrtbegin.a frtbegin.o
$ objdump -t frtbegin.o
・「他人のPC」の環境
「他人のPC」も Cygwinのg77を使っているなら問題の切り分けに役に立ちます。
もしそうなら、そのバージョンも示してください。
あるいは、他のOSであっても、g77を使っているならバージョンを示すと切り分けに
役立ちます。(例えば、特定のバージョンのg77のみに不具合がある、とかの場合)
・ちなみに
手元の以下の環境で、ごく簡単なプログラムを試したところ、
コンパイルと実行ができました。
OS : Windows XP Professional SP1
$ uname -a
CYGWIN_NT-5.1 xiao 1.5.9(0.112/4/2) 2004-03-18 23:05 i686 unknown unknown Cygwin
$ cygcheck -c cygwin gcc-g77
cygwin 1.5.9-1 OK
gcc-g77 3.3.1-3 OK
$ g77 --version
GNU Fortran (GCC) 3.3.1 (cygming special)
(以下略)
試したプログラム
C Hello World in Fortran
PROGRAM HELLO
WRITE (*,100)
STOP
100 FORMAT (' Hello World! ' /)
END
実行結果
$ g77 -o hello hello.f
$ ./hello
Hello World!
みなさま、ありがとうございます。返事が遅れて申し訳ありません。スレッド一覧
私はwin2000Pro sp4を使用しております。
cygwin・g77のバージョンを調べました。
$ uname -a
CYGWIN_NT-5.1 tochi 1.5.9(0.112/4/2) 2004-03-18 23:05 i686 unknown unknown Cygwin
$ cygcheck -c cygwin gcc-g77
cygwin 1.5.9-1 OK
gcc-g77 3.3.1-3 OK
$ g77 --version
GNU Fortran(GCC) 3.3.1 (cygming special)
以下略。
「他人のPC」も同スペックです。
通りすがり様からご指摘がありました
>「MAIN」と書くべきところを「MIAN」と書いてしまっているの>ではないでしょうか
まったくその通りです。ありがとうございました。
再度、エラーメッセージを掲載します。
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.1/../../../libfrtbegin.a(frtbegin.o)(.text+0x3e):main.c: undefined reference to ` _MAIN_'
collect2: ld returned 1 exit status
prt様の方法も試してみましたが同様のエラーが出ました。
プログラムはメインとそのサブルーチンが多数あるものです。全部、後ろに書く際にはその順番などが関係するのでしょうか?
discypu様、私も簡単なプログラムを組むとそれはコンパイルしてくれます。しかし、今私が動かしたいプログラムはだめでした。プログラム自体の問題なのかとも思いましたが、他人のPCでは動くためその可能性はないと思っております。私のPCが悪いのかとも思っているのですが・・・
エラーメッセージは本当に正確に引用できていますか?スレッド一覧
` _MAIN_' では無くて、'_MAIN__' じゃないのですか?
そうであれば、現状では第3者に必要な状況説明ができていません。
単に、PROGRAM宣言のあるファイルを正しく扱えていないだけに見えます。
(_MAIN__ はPROGRAM宣言のある時コンパイラが自動的に作成するシンボルのようなので)
他にメッセージは出ていないのですか?
他人のPCで動く、と言っても、自分で試したのか、他人が操作したのかでまったく状況が違います。
学習中の方がよく陥るのは、中途半端な判断で安易に可能性が無いと考えたり、自分の手順の中のおかしな部分に気がつかないで除外してしまう点があります。
動いている状況との比較をすれば、確実にわかるケースだと思いますが、確認が安易過ぎやしないでしょうか? ご精進を。