web-dev-qa-db-ja.com

致命的なエラー:mpi.h:そのようなファイルまたはディレクトリはありません#include <mpi.h>

私だけでスクリプトをコンパイルするとき

#include <mpi.h>

そのようなファイルやディレクトリは存在しないことがわかります。しかし、mpi.hへのパスを含めると

#include "/usr/include/mpi/mpi.h"

(パスが正しい)それは返します:

In file included from /usr/include/mpi/mpi.h:2087:0,
                 from lbm.cc:7:
/usr/include/mpi/openmpi/ompi/mpi/cxx/mpicxx.h:35:17: fatal error: mpi.h: No such file or directory
 #include "mpi.h"
                 ^
compilation terminated.

誰でもこれを修正する方法を知っていますか?

31
user2804865

問題は、ほぼ間違いなく、MPIコンパイララッパーを使用していないことです。MPIプログラムをコンパイルするときは、MPIラッパー:

  • C-mpicc
  • C++-mpiCCmpicxxmpic++
  • FORTRAN-mpifortmpif77mpif90

これらのラッパーは、プログラムをコンパイルするときに、適切なコンパイラフラグ、ラ​​イブラリ、インクルードディレクトリ、ライブラリディレクトリなどがすべて含まれるように、すべての汚い作業を行います。

30
Wesley Bland

私のシステムでは、Linuxパッケージが欠落していました。

Sudo apt install libopenmpi-dev
pip install mpi4py

(それを使用して、成功したかどうかを確認するための適切なインスタントテストの例)

成功しました。

8

Debianには次のものが含まれているようです。

  • mpiCC.openmpi
  • mpic ++。openmpi
  • mpicc.openmpi
  • mpicxx.openmpi
  • mpif77.openmpi
  • mpif90.openmpi

Mpicなどの各シンボリックリンクをテストし、それがHDF5-openmpi対応のmpi.hを見つけるのに役立つかどうかを確認します。

Debianには代替システム経由でシンボリックリンクが含まれていますが、H5public.hヘッダーで参照されているHDF5 openmpiパッケージとmpi.hの間の適切なパスを見つけることができません。

3

上記のように、

/usr/lib/openmpi/include 

インクルードパスでこれを処理します(私の場合)

3
jeremy_rutman

私のシステムではUbuntu 16.04。私はインストールしました:

Sudo apt install libopenmpi-dev

mpiCCを使用してコンパイルした後、動作します

1
user7484492

以下を実行できます。

$ mpicc -showme 

結果:

gcc -I/Users/<USER_NAME>/openmpi-2.0.1/include -L/Users/<USER_NAME>/openmpi-2.0.1/lib -lmp

このコマンドは、mpiccをコンパイルするために必要なライブラリを表示します

例:

$ mpicc -g  -I/Users/<USER_NAME>/openmpi-2.0.1/include -o [nameExec] [objetcs.o...] [program.c] -lm


$ mpicc -g  -I/Users/<USER_NAME>/openmpi-2.0.1/include -o example file_object.o my_program.c otherlib.o -lm

このコマンドは、たとえばプログラムで実行可能ファイルを生成します。次を実行できます。

$ ./example
0
Bvacavar