Hi, I just compiled my library with version 1.0 of OpenMPI and I had two problems.
First the MPI_Offset datatype is defined as a preprocessor macro as follow in mpi.h: /* Type of MPI_Offset */ #define MPI_Offset long long This generate a syntax error when MPI_Offset is used in C++ for what Stroustrup call a value construction (e.g. type ( expr_list ) c.f. section 6.2 in The C++ programming language). For example the following code: MPI_Offset ofs,size; int nbr; // compute ofs, size and nbr. ofs += MPI_Offset(nbr)*size; cannot compile if MPI_Offset is defined as it is currently. The obvious solution is to define MPI_Offset as a typedef as follow: /* Type of MPI_Offset */ typedef long long MPI_Offset; Note that a similar typedef is used for MPI_Aint: typedef long MPI_Aint; The seccond problem is related to the C++ interface: it uses direct C-style type cast that remove constness. Since ISO/C++ have the const_cast operator especially for this situation, the compiler generates TONS of warnings (I use to compile my code with -Wall and many other warning activated) and this is really annoying. The solution to this problem is to replace C-style cast with const_cast operator. For example the MPI::Comm::Send method defined in openmpi/ompi/mpi/cxx/comm_inln.h as follow: inline void MPI::Comm::Send(const void *buf, int count, const MPI::Datatype & datatype, int dest, int tag) const { (void)MPI_Send((void *)buf, count, datatype, dest, tag, mpi_comm); } becomes: inline void MPI::Comm::Send(const void *buf, int count, const MPI::Datatype & datatype, int dest, int tag) const { (void)MPI_Send(const_cast<void *>(buf), count, datatype, dest, tag, mpi_comm); } This fix the annoying warning problem because the const_cast operator is the intended method to remove constness. Martin Audet E: matin.au...@imi.cnrc-nrc.gc.ca Research Officer T: 450-641-5034 Industrial Material Institute National Research Council of Canada 75 de Mortagne, Boucherville, QC, J4B 6Y4