Cygwin なんでも掲示板

一覧最新記事過去一覧 | 検索FAQアンテナHOME
(新規投稿・発言はできません)


スレッド

└◇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 <


2066● g77[ とちろー ] 2004 04/07 15:16
私は、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自体はフルインストールしています。
スレッド一覧


2071● Re:g77[ prt ] 2004 04/08 20:48
私はプログラミングのことは(ことも)良くわかっておりませんが,
どのようなソースなのかわからなくては,
プログラミングに詳しい人でもご返事しにくいのではないかと
想像しますが,いかがでしょうか.


以下素人の推測です.
g77 -c *.f
としてコンパイルし,出来たオブジェクトファイルを一つ一つ記述して
1行で
g77 -o test hoge1.o hoge2.o ..... hogeN.o
とリンクしてやれば出来る/どこが悪いかもう少しはっきりしたエラーがでる
と勝手に思っております.
とんだ勘違いかもしれません.
その場合は平にご容赦ください.
スレッド一覧


2072● Re:g77[ 通りすがり ] 2004 04/08 22:22
Fortranは不勉強なので間違っているかも知れませんが
エラーメッセージにある「_MIAN_」が写し間違いではなく、
コピー&ペーストしたものであるならば、
「MAIN」と書くべきところを「
MIAN」と書いてしまっているのではないでしょうか?
スレッド一覧


2074● Re:g77[ discypus ] 2004 04/09 00:19
・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!
スレッド一覧


2076● ありがとうございます[ とちろー ] 2004 04/09 10:01
みなさま、ありがとうございます。返事が遅れて申し訳ありません。

私は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が悪いのかとも思っているのですが・・・
スレッド一覧


2077● Re:g77 (PROGRAM >> _MAIN__)[ nil ] 2004 04/09 18:28
エラーメッセージは本当に正確に引用できていますか?
` _MAIN_' では無くて、'_MAIN__' じゃないのですか?
そうであれば、現状では第3者に必要な状況説明ができていません。

単に、PROGRAM宣言のあるファイルを正しく扱えていないだけに見えます。
(_MAIN__ はPROGRAM宣言のある時コンパイラが自動的に作成するシンボルのようなので)

他にメッセージは出ていないのですか?

他人のPCで動く、と言っても、自分で試したのか、他人が操作したのかでまったく状況が違います。

学習中の方がよく陥るのは、中途半端な判断で安易に可能性が無いと考えたり、自分の手順の中のおかしな部分に気がつかないで除外してしまう点があります。

動いている状況との比較をすれば、確実にわかるケースだと思いますが、確認が安易過ぎやしないでしょうか? ご精進を。
スレッド一覧

早田のホームページへ
CGIROOM