Hello, This is a follow up to a message originally posted by Andrew J Caird on 2006-08-16. No one ever replied to Andrew's message, and I am experiencing exactly the same problem with a more recent version of OpenMPI (1.2.1) and the PGI compiler (7.0). Essentially, the problem is that if you link an MPI application against the mpi_cxx library, at run time you will get a failure with each process giving the following message:
C++ runtime abort: internal error: static object marked for destruction more than once If your MPI application does not utilize the MPI C++ bindings, you can link without this library and the runtime errors will go away. Since this problem was reported long ago and no one ever replied to the report, I would assume that this is a bug either in the mpi_cxx library or in the way it is built under the PGI compiler. I could not figure out how to submit a bug report to the open-mpi bug tracking system, so I hope that this message to the users list will suffice. I am attaching my ompi_info --all output to this message. I am running on a Myrinet-based Linux cluster, but the particulars are not relevant for this problem. You can replicate the problem with any trivial MPI application code, such as the standard "hello" program using the standard C interface. I am attaching my hello.c source code. Compile with "mpicxx -o hello hello.c" and run with "mpirun -np 1 ./hello". The runtime error disappears if you compile with "mpicc -o hello hello.c" to avoid linking against the mpi_cxx library. Please let me know if there is any fix available for this problem. Regards, Julian C.
ompi_info.txt.gz
Description: GNU Zip compressed data
/* -*- c -*- // // // Copyright 1997, University of Notre Dame. // Authors: Andrew Lumsdaine, Michael P. McNally, Jeremy G. Siek, // Jeffery M. Squyres. // // This file is part of the Notre Dame C++ bindings for MPI // // You should have received a copy of the License Agreement for the // Notre Dame C++ bindings for MPI along with the software; see the // file LICENSE. If not, contact Office of Research, University of Notre // Dame, Notre Dame, IN 46556. // // Permission to modify the code and to distribute modified code is // granted, provided the text of this NOTICE is retained, a notice that // the code was modified is included with the above COPYRIGHT NOTICE and // with the COPYRIGHT NOTICE in the LICENSE file, and that the LICENSE // file is distributed with the modified code. // // LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. // By way of example, but not limitation, Licensor MAKES NO // REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY // PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE COMPONENTS // OR DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS // OR OTHER RIGHTS. */ #include <stdio.h> #include "mpi.h" int main(int argc, char *argv[]) { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); printf("Hello World! I am %d of %d\n", rank, size); MPI_Finalize(); }