error fatal: mpi.h: No hay tal archivo o directorio #include


Cuando compilo mi script con solo

#include <mpi.h>

Me dice que no hay tal archivo o directorio. Pero cuando incluyo el camino a mpi.h como

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

(la ruta es correcta) devuelve:

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.

¿Alguien sabe cómo arreglar esto?

Author: Wesley Bland, 2014-11-14

5 answers

El problema es casi seguro que no está utilizando los envoltorios del compilador MPI. Siempre que esté compilando un programa MPI, debe usar los envoltorios MPI:

  • C - mpicc
  • C++ - mpiCC, mpicxx, mpic++
  • FORTRAN - mpifort, mpif77, mpif90

Estas envolturas hacen todo el trabajo sucio para usted de asegurarse de que todos los indicadores de compilador apropiados, bibliotecas, incluyen directorios, directorios de bibliotecas, etc. se incluyen cuando compila su programa.

 25
Author: Wesley Bland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-14 02:09:44

En mi sistema, me faltaba el paquete Linux.

sudo apt install libopenmpi-dev
pip install mpi4py

(ejemplo de algo que lo usa que es una buena prueba instantánea para ver si tuvo éxito)

Sucedido.

 5
Author: Gregory Alan Bolcer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 18:43:19

Como se sugirió anteriormente, la inclusión de

/usr/lib/openmpi/include 

En la ruta de inclusión se encarga de esto (en mi caso)

 3
Author: jeremy_rutman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-17 13:22:56

Debian parece incluir lo siguiente:

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

Probaré los enlaces simbólicos de cada uno para mpic, etc., y ver si eso ayuda a los gustos de HDF5-openmpi habilitado encontrar mpi.h.

Retire que Debian incluye enlaces simbólicos a través de su sistema alternativo y todavía no puede encontrar las rutas adecuadas entre los paquetes HDF5 openmpi y mpi.h referenciado en el H5public.h cabecera.

 1
Author: Marc J. Driftmeyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-26 20:09:26

Puedes ejecutar:

$ mpicc -showme 

Resultado:

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

Este comando le muestra las bibliotecas necesarias para compilar mpicc

Ejemplo:

$ 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

Este comando genera ejecutable con su programa en el ejemplo, puede ejecutar:

$ ./example
 0
Author: Bvacavar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-03 12:32:59