2012-12-25 7 views
8

をコンパイルされていない簡単なMPI「こんにちは、世界!」ですプログラム。Open MPI "Hello、World!"ここで

#include <stdio.h> 
#include <mpi.h> 

int main(int argc, char **argv) 
{ 
    int size, rank; 
    MPI_Init(&argc, &argv); 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
    printf("SIZE = %d RANK = %d\n",size,rank); 
    MPI_Finalize(); 
    return(0); 
} 

しかし、コンパイルしていないようです:

Undefined      first referenced 
symbol        in file 
MPI::Datatype::Free()    /var/tmp//ccE6aG2w.o 
MPI::Win::Free()     /var/tmp//ccE6aG2w.o 
MPI::Comm::Comm()     /var/tmp//ccE6aG2w.o 
ld: fatal: symbol referencing errors. No output written to main 
collect2: ld returned 1 exit status 

私は、多くのことをググメーリングリストを見、彼らの何千もしました。彼らはlibmpi_cxxがリンクしていないと言います。しかし、それはコンパイラフラグにあります。

mpic++ --showme:compile 
-I/usr/openmpi/ompi-1.5/include -I/usr/openmpi/ompi-1.5/include/openmpi 

mpic++ --showme:link 
-R/opt/mx/lib -R/usr/openmpi/ompi-1.5/lib -L/usr/openmpi/ompi-1.5/lib -lmpi -lopen-rte -lopen-pal -lnsl -lrt -lm -ldl -lsocket -lmpi_cxx 

私のコンパイラは、G ++である:

はここ--showmeデータです。

+1

(正しい)ライブラリを正しくリンクしていますか? –

+0

@MarkGarcia適切なリンクを張ったらどういう意味ですか? – efpies

+2

このコードのコンパイルとリンクに使用する完全なコマンドラインを表示できますか?書かれているように、あなたのコードは 'mpicc'とコンパイルしてリンクできなければなりません。これはC++バインディングへの参照をしないからです。 – Novelocrat

答えて

8

ちょうど私がuはあなたのコードを実行する方法がわからない

をコンパイルするという問題があったすべてのヘッダファイル 時々上記mpi.hヘッダファイルを配置します。 コンパイル

mpic++ your_code_file.c 

実行が

mpirun -np <no. of Processors> ./a.out 
+0

いいえ、私は最初にそれを試しました。 – efpies

1

また、ずっとeaserと "並列アプリケーション開発者のためのEclipse" でOpenMPIのとMPIプログラムをコンパイルするより柔軟なIDEです。

http://www.eclipse.org/downloads/packages/eclipse-parallel-application-developers/junosr1

+0

ポイントは、リモートサーバ上で 'sudo'の権限がなくてもopenmpiを使うことでした。しかし、リンクのおかげで、MacPortsの問題で私のMac MiniでこのIDEを使うことができたかもしれません。 – efpies

1

いくつかの注意事項:オープンMPI 1.5は、古代であることを

  1. 注意。現在、1.6.3である(オープンMPI 1.6.xのシリーズの最新バージョンにアップグレードしますが、www.open-mpi.orgウェブサイトは現在計画年末のメンテナンスを受けているとバックできなくなりますのでご注意ください2012年12月28日(木)まで)。

  2. は、私が興味:なぜあなたはMPICの++とCプログラムをコンパイルしていますか? mpicc(C MPIラッパーコンパイラ)を使うだけです。それは間違いなくあなたの問題を避けるでしょう。あなたは簡単な例として、この小さなCのHello Worldプログラムを使用していて、実際のターゲットはC++ MPIプログラムをコンパイルする場合しかし、その後、MPIC++は(たとえ簡単なCプログラムで)しようとする正しいラッパーです。その場合は、あなたはあなたのC++コンパイラとオープンMPIが一緒にインストール/コンパイルされたC++コンパイラ間の非互換性/構成ミスのいくつかの種類があります。

  3. あなたのmpiC++ --showmeの出力を見ると、Open MPIのパッケージ配布があるようですが、-Rはデフォルトでフラグに入れられません。このOpen MPIのインストールはどこで手に入りましたか? g ++のインストールと完全に互換性がない可能性があります(たとえば、別のバージョンのg ++​​でコンパイルされている場合など)。

  4. あなたのmpiC++ --showmeの出力には、の-lmpi_cxxがリストされています。 はないそれの右に、-lmpiの左にはする必要があります。あなたのインストールがどうやってそのようになっているかは分かりませんが、それが別の原因かもしれません。

だからまとめるために、私の答えは次のとおりです。

  1. オープンMPIをアップグレードしようとすると、問題が消えるかどうかを確認してください。
  2. Open MPIのインストールがシステムと互換性があることを再度確認してください。
+0

私はずっと前にこの問題を抱えていましたが、今はそうではありませんでしたが、私は(3)に答えたいと思います。 「このOpen MPIのインストールはどこで手に入りましたか?」私はMac OS Xを使用しており、ソフトウェアの手動設定とインストールを避けようとしています。そこでMacPortsを使ってOpenMPIライブラリ(gcc/g ++と同様)をインストールしました。それは問題を引き起こす可能性があるので、OpenMPIを手動でインストールすることをお勧めします(少なくとも2012年後半には)。たぶん誰かを助けるかもしれない。 – efpies