原因予想。

  1. 時計が狂っているせいで、makeが依存関係の処理をうまくできていない
  2. 引数を取得する部分のソースが完全にg77用になっている
  3. 「config/makefile.h:138: /home/tetsuya/nwchem-4.7/src/config/nwchem_config.h: そのようなファイルやディレクトリはありません」


1について。/home はNFSでマウントしており、計算機とは別になっている。make中に、

make[3]: 警告: クロックの歪みを検出。不完全なビルド結果になるかもしれません。

としょっちゅう表示されるのは、/homeのあるファイルサーバの時計と、計算機の時計にズレがあるから。makeはファイルの更新日時で、再buildが必要かどうかを判断しているらしい*1ので、このズレのせいでうまく判断できていない可能性がある。


2について。f__xargcとf__xargvがundefinedだからエラー、と言われる。この変数はg77でFortranコンパイルしたときにg77が生成する(?)ものらしい。問題の箇所では、Fortranプログラムのコンパイル時に、Cで書いたライブラリlibtcmsg.aをリンクしようとしていて、libtcgmsg.aがf__xargc等を呼ぼうとしているらしい。プログラム本体の側はFortranの方であり、当然引数もそちらが保持しているのだろう。従ってlibtcgmsg.aはFortranプログラムから引数を取得しようとするが、Fortranプログラムのコンパイルをifortで行なっているため、そのような変数が生成されず、エラーになるものと考えられる。
http://www.pgroup.com/support/link.htm
によれば、この問題はCプログラム側とFortranプログラム側のソースを書き換えることで解決できるようだ。つまり、CとFortranインターフェイスを合わせてやれば、うまくリンクできる、ということらしい。ただ、このサイトの例はifortではなく、pgf77を使う例なので、読み替えなくてはならない。


3について。アーカイブが破損でもしてるのか? とりあえずどうしようもない。


果てしなく面倒な領域になってきた。ここまでやる必要ないはずなんだけどな。うぅむ……