• ベストアンサー

MPIを用いたFortranプログラムのコンパイル

バンド構造などをシミュレーションできるソフトPHASE ver. 4.00を下のサイトからダウンロードし、makeしようとしたのですが出来ません。 http://www.fsis.iis.u-tokyo.ac.jp/result/software/ エプソンダイレクト TP715LR CPU名称 Pentium III CPU動作周波数 700MHz メモリ 128MB OS Fedora Core 5 Linux Fortranコンパイラ intel Fortran Compiler 9.0 for Linux Cコンパイラ gcc MPI mpich-1.2.7 PHASEはMPIを使ったFortranのプログラムで、オブジェクトファイルは作られたのですが、最後のリンクのところで IPO link: can not find -lfmpich というエラーメッセージが出てしまいます。 リンクはifortで、オプションに-lfmpich -lmpichなどを指定しました。 -lのオプションは後に続くディレクトリ名をライブラリの検索先として指定するようなので、どこかにfmpichというディレクトリがあるかどうか調べたのですが存在しませんでした。本来ならばどこかにあるものなのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ac_nonexistent.h は私のシステムにもなかったです。 mpichのインストール前にifortを動くように設定しないとmpif90などが作られないということがあるみたいなのでそのあたりと、 configureをもう一度注意深くやってみるのが良いと思います。 よいアドバイスができずすいません。

ha2ru2
質問者

お礼

とんでもないです。 次のように設定したところ、lib/libfmpich.aもbin/mpif90も作られ、 IPO link: can not find -lfmpich というエラーがなくなりました。 # ./configure -cc=icc -c++=icc -fc=ifort -f90=ifort # make # make install 諦めかけていたところヒントを頂き、エラーを解決できました。 どうもありがとうございました。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

あんまり役に立たない情報ですが、ac_nonexistent.h は多分 configure でコンフィグレーションチェックをしている過程でチェックのために 自動生成しているファイル(の一つ)です。 ですからこのファイルの存在はあまり気にしないでよいかと。 ポイントは > error: unrecognized command line option "-f " > error: Command line access is required for MPICH こっちです。 このメッセージの前後にどのようなコマンドを実行しようとしたなどの 情報があるはずなのですが、それはどうなっていますか? また configure に与えるオプションで何か手がかりになるようなものはないのでしょうか? ./configure --help でオプション一覧が出せます。

ha2ru2
質問者

お礼

おっしゃるとおりでした。 どうやらmpichをmakeするのにgccでなくintelのifortを使うよう、 mpichのconfigureの際にオプションで指定する必要があったようです。 どうもありがとうございました。

回答No.1

PHASEというソフトを使っていませんが、mpichはつかっております。 mpich-1.2.6/libの中に libfmpich.a というライブラリがあるのでそれとリンクすると言うことだと思います。 ライブラリの検索先の指定は-Lだと思います。 -lはライブラリを指すと思います。

ha2ru2
質問者

お礼

回答ありがとうございました。 探してみたところ、/libにlibmpich.aはあったのですが、libfmpich.aはありませんでした。 他の所も検索してみましたがありません。 http://bbs.fedora.jp/read.php?FID=8&TID=3172 上の掲示板の症状と同様、bin/mpif90もなく、./configureの出力を見ると Error configuring the Fortran subsystem! とありました。 src/fortran/config.logを見ると configure: exit 1 とあり、そのログファイル中にエラーが7箇所程ありました。主なものに error: ac_nonexistent.h: No such file or directory error: unrecognized command line option "-f " error: Command line access is required for MPICH とありましたが、どうすればいいのか分かりません。 ac_nonexistent.hというものが本来はどこかにあるのでしょうか…

ha2ru2
質問者

補足

回答ありがとうございます。 正確にlibfmpich.aだったか覚えていませんが、拡張子が.aのファイルはどこかにあったような気がします。 もし別の所にあったら/libに移してやればよいのですね。 -Lと-lが別物ということも分かりました。 報告は来週になってしまいますが、有効な情報をありがとうございます。

関連するQ&A

  • MPIを用いたFortranプログラムのコンパイル エラー

    前回(http://okwave.jp/kotaeru.php3?q=2361804)に続いてエラーで困っています。 バンド構造などをシミュレーションできるソフトPHASE ver. 4.00を下のサイトからダウンロードし、makeしようとしたのですが出来ません。 http://www.fsis.iis.u-tokyo.ac.jp/result/software/? 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が関係しているような気がするのですが、自分ではどうすればよいのか分かりません。 エラーの意味とその対処法をお願いします。

  • 並列化プログラムのコンパイル環境と実行環境が違う

    fortran77で物理計算をしています。 パソコンが2つあって、一つは個人で使うもので、もうひとつはスパコンです。 個人PCのコンパイラはifort、スパコンはfrtが入っています。 普段は個人PCのifortでコンパイルしてからスパコンに実行ファイルを転送して走らせています。 今のところこれで問題ありません。 このプログラムを並列化して計算時間を短縮しようかなとおもっています。 mpiなりopenMPなりでプログラミングして、(もしくはifortの自動並列化コマンドを使う) (1)ifortでコンパイルしたものをスパコンに送って走らせる方法 と、 (2)スパコン内のfrtでコンパイルして走らせる方法 では 実行速度は劇的に変わるものでしょうか? frtの使い方がイマイチわからずmakeが通らないので出来れば避けたいなと思って質問させていただきました。 勉強不足な点があると思いますが、よろしくお願いします。

  • intel fortran cimpilerでプログラムファイルがコンパイルできない

    こんにちは。 当方プログラムに関しては全くの初心者です。 研究で早急に計算プログラムを使用したく、 現在intel fortran cimpiler8.0を使い、とあるソースファイルをコンパイルしたいのですがうまくいきません。 コンパイルの手順としてあっているのか自信がないのですが、 とりあえずやってみて、以下のようにエラーが出ます。 $ source /opt/intel_fc_80/bin/ifortvars.csh bash: /opt/intel_fc_80/bin/ifortvars.csh: line 28: syntax error: unexpected end of file $ ifort /home/ディレクトリのパス/ファイル名.f90 ifort: error: could not find directory in which g++ resides これはどういうことなのでしょうか?? どなたかご教授お願いいたします。 ちなみに、使用しているOSはlinuxのFedora.core1です。

  • fortran freeについて

     現在fortran のフリーコンパイラを探しています. 作業環境が Dual CPUが増えたため,dual CPU対応のフリーコンパイラをご存知でしたら教えてください. 通常使用しているPCのOSはWin XPですが,Win版が無ければLinux等でも構いません. どなたか良い情報がありましたら教えてください.よろしくお願いします.

  • C++の関数をfortranから呼びたい。(intelFortran,

    C++の関数をfortranから呼びたい。(intelFortran, g++) いつもお世話になっています。 現在WindowsXP上で、MinGWのC++コンパイラのg++と intelFortranのifortコマンドを使用して、 fortranからc++関数を呼ぼうとしていますが リンクできません。 ソースは以下で紹介したものをそのまま使用しています。 http://okwave.jp/qa/q5806443.html 手順は、 D:\C>ifort -c helloFortran.f D:\C>g++ -c funcHelloC.cpp D:\C>ifort helloFortran.obj funcHelloC.o 結果は、 error LNK2019: 未解決の外部シンボル*****が関数**** で参照されました。 と数行出力されています。 お手数ですが、よろしくお願いします。

  • Fortranのバージョンアップと古いソースコード

    Fortranは科学技術計算の古い資産が使えるということでまだ使われていると思います。 しかも、コンパイラ・リンカは製品としてバージョンアップしているわけですが、新しくなっても古いコードはコンパイル・リンク・実行できると思っていました。最近、intel fortranの更新をしたのですが、動作がかなり違ってきました。F77,F90,F95などの更新ではなく、intel社の製品としての最新版への更新です。コンパイル・リンクまでは行くのですが、実行させたとたん、ゼロ割のようなメッセージが出て、実行が打ち切られてしまいます。1時間ぐらい走るプログラムなのですが、1秒で打ち切りでした。必ずそうなるということではありません。特定のライブラリで生じます。そのライブラリは古い(言語としてはF77)ので当然ながら新しいコンパイラで動くなどと書いていません。ただソースコードの塊であり、古いコンパイラでは動いていたのです。古いと行っても2009年ぐらいに買ったintel visual fortran ver.11ぐらいのもので2016年のコンパイラと大幅な変更はないはずなのですが。例えば最新版(2016年2月時点)の方は並列関係の設定の方がデフォルトで並列計算しない設定をコンパイラオプションで指定しないとおかしくなるということでしょうか(たぶんGPUには対応していないと思いますが)。どっかに書いてあるかなと思案していますが。 何か心当たりがあればよろしくお願いします。

  • VineでFORTRAN

     「Vine Linux 2.6 r4」を使っています. 「ワークステーション」でインストールしました.  FORTRANで開発をたくて下記のサイトを参考にし「gcc-g77」をインストールしました. しかし,以下のようなエラーが出てしまいます. 何が原因で,どうのように解決すればいいのでしょうか? /usr/bin/ld:program_name.f90:file format not recognized; treating as linker script /usr/bin/ld:program_name.f90l:1:parse error collect2:ld returned lexit status ・参考にしたサイト 初歩的なFORTRANコンパイラ導入ガイド http://www-kn.sp.u-tokai.ac.jp/~inoue/computor/fortran/fortran.html PCの知識レベルとしては「初級シスアド」の資格を持っている程度です. よろしくお願いします.

  • g++コンパイルしながら使用されたヘッダー・ライブラリのフルパスを表示させたい

    宜しくお願い足します。 : posix gcc 3.2.2 20030222 (Red Hat Linux 3.2.2-5) g++: no input files の環境です。 $ g++ -o hoge hoge.cc としてコンパイルしながらにコンパイラがどのヘッダー、ライブラリを使用したかフルパスで表示させるにはどのようなオプションを指定すればいいのでしょうか?

  • ifortのアンインストール

    初めまして。ifortのインストールに関する質問です。 fedora9でfortranのプログラミングをしようと思い、intelから ifortをダウンロードしてインストールしようとしました。 シェルスクリプトを実行してインストールする形だったのですが、 手違いでインストールを途中で中断してしまい、インストールし 直そうとしてもう一度スクリプトを実行してみると、 「インテル(R) Fortran コンパイラー linux* 版プロフェッショナル ・エディション 11.1 はすでにインストールされています。 インテル(R) Fortran コンパイラー linux* 版プロフェッショナル ・エディション 11.1を再インストールする場合は、現在のバージョン をアンインストールした後、再度インストールを実行してください。」 と表示されました。そこで「rm -rf /opt/intel」と実行してインスト ールしたファイルを消去してもう一度インストールしようとしたので すが、上と同じ文章が表示されてインストールできません。 マニュアルを見ると/opt/intel以下のディレクトリにアンインストール 用のスクリプトがあったようなのですが、早まって消去してしまい、 実行することができません。どうすればアンインストールできるでしょうか。 回答よろしくお願いします。

  • Linuxマシンの複数台による並列計算環境の構築

    LinuxのPCが複数台、ルータ(ハブ)で接続されています。 これを用いて並列計算環境を構築したいと思います。サイトなどで調べたら以下のようにあっさりと書いてあります。 ○ OpenMPのインストール sudo apt-get install openmpi-bin openmpi-dev ○ 公開鍵認証を使い、パスフレーズなしで各ノードにsshでログインできるようにしておく。 その後は、実際に計算例などが出ていました。これだけで環境構築ができるらしいです。OpenMPだけでなく、MPICHによる環境の構築も出ていましたが。 そこで質問ですが、 1.OpenMPのインストールは複数台あるPCの中の1台だけでやるのでしょうか。それとも全部でやるのでしょうか。sudo ...以下のコマンドラインは各PC(ノード)でやるのでしょうか。 2.コンパイラは各PC(ノード)に個別にインストールされている必要があるでしょうか。 3.最近のGCCにはすでにOpenMPが含まれているとのことです。これは1つのPCでCPUを分割して計算する場合に用いるらしいですが、グリッドコンピューティングの場合、やはり別途OpenMPの環境設定が必要なのでしょうか。 4.gccの場合、gfortranもインストールされるようです。intel fortranで利用する場合、OpenMP(あるいはMPICH)の環境が設定できれば実行可能なのでしょうか。 5.OpenMPとMPICHによる並列環境が両方共確立しているということは無意味でしょうか。あるいは不可能なものでしょうか。使い分けができるかどうかということでもありますが。 6.話がころっと変わりますが、MACの場合、もっと簡単にできると聞いたことがあります。最近はMACにもgccが標準で入っているようで、1つのPCでの並列化はコンパイラにオプションをつけて実行できるようです。これが複数台のPCではどうなるでしょうか。 以上、よろしくお願いします。

専門家に質問してみよう