アプリ版:「スタンプのみでお礼する」機能のリリースについて

前回(http://okwave.jp/kotaeru.php3?q=2361804)に続いてエラーで困っています。

バンド構造などをシミュレーションできるソフトPHASE ver. 4.00を下のサイトからダウンロードし、makeしようとしたのですが出来ません。
http://www.fsis.iis.u-tokyo.ac.jp/result/softwar …

OS Fedora Core 5 Linux
Fortranコンパイラ intel Fortran Compiler 9.0 for Linux
Cコンパイラ gcc
MPI mpich-1.2.7

PHASEはMPIを使ったFortranのプログラムで、オブジェクトファイルは作られたのですが、最後のリンクのところで下のようなエラーが出てしまいます。

/opt/intel/fc/9.0/lib/libifcore.a(for_open_proc.o): In function `for__compute_filename.':./src/libfor/for_open_proc.c:(.text+0xc14): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

/opt/intel/mpich/lib/libmpich.a(p4_secure.o): In function `start_slave':p4_secure.c:(.text+0x80): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

この後に次のような/usr/lib/libc.a ... undefined reference to ...という形のエラーが43行あります。

/usr/lib/libc.a(iofclose.o):(.eh_frame+0x121): undefined reference to `__gcc_personality_v0'
/usr/lib/libc.a(iofflush.o): In function `fflush': undefined reference to `_Unwind_Resume'

どうやらglibcが関係しているような気がするのですが、自分ではどうすればよいのか分かりません。

エラーの意味とその対処法をお願いします。

A 回答 (1件)

/opt/intel/fc/9.0/lib/libifcore.a(for_open_proc.o): In function `for__compute_filename.':./src/libfor/for_open_proc.c:(.text+0xc14): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking



リンクのオプションで static の指定があるのではないでしょうか。最近の Linux では static にリンクしようとすると上記のメッセージがでますが、無視しても大丈夫です。

問題は、ndefined reference の方ですが、情報が少ないので憶測ですが、gcc を C のコンパイルに使っているのが問題なようなきがします。Intel の C コンパイラを PHASE のビルドに使うとどうなるでしょう?

この回答への補足

回答ありがとうございます。
遅くなりましたが、gccの代わりにiccを指定してPHASEをビルドしたところ、gccの場合と全く同じエラーが出ました。

iccを指定してもエラーの中にusr/lib/libc.aと`__gcc_personality_v0'という文字が入っている理由が分かりません。

makefileを見た限りlibc.aをリンクする指定はないのですが、libc.aというのはC言語関係の処理の際には自動的に参照されるものなのですか?その中でgccという特定のコンパイラの名前が入っているのも不思議です。

先に書いてませんでしたが、PHASEのソースはFortranのコンパイルの前にC言語プリプロセッサで前処理をするようになっており、そのC言語プリプロセッサとしてcppを指定しています。もしかしたらこれが関係しているかもしれないので、C言語プリプロセッサとしてcppの代わりにBorland C++ Compiler 5.5のcpp32を、Cコンパイラとしてgccの代わりにbcc32を使ってみようかなと思っています。

それにしても、PHASEだけが使うわけではないlibc.aが未定義のものを参照しているということは、LINUXのC言語開発環境なら当然あるべきものが不足しているということなのでしょうか…

補足日時:2006/09/06 19:43
    • good
    • 0
この回答へのお礼

Linux用のBorland C++ Compilerが存在しないようなので残念です。
Googleで"libc.a __gcc_personality_v0"と検索すると同様なエラーメッセージが沢山ありましたので、参考にしてみようと思います。
回答どうもありがとうございました。

お礼日時:2006/09/09 00:48

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