(note that Chrisophe is not subscribed to devel, so if he replies, we won't see it -- sorry; spammers force this kind of policy on us :-( )

On Jan 22, 2009, at 6:10 AM, Dirk Eddelbuettel wrote:

This bug report just came in against the new Open MPI 1.3 release which we
built the same way as 1.2.*.

Christophe,

Sorry about that. And yes, it should be a drop-in replacement. You can
revert back to 1.2.8 from testing for now.  If you have a small
self-contained C++ example, it would help debugging.

FWIW, "drop in replacement" in this context means recompile and relink. We did not provide binary compatibility between the 1.2 series and the 1.3 series.

More below.

| I just upgraded to openmpi 1.3-1. The compilation of my codes went fine.
| The linking stage sometimes failed with
|
| undefined reference to `MPI::Win::Set_errhandler(MPI::Errhandler const&)' | undefined reference to `MPI::Comm::Set_errhandler(MPI::Errhandler const&)'
|
| in some external libs (trilinos) using openmpi
|
| When linking is ok, runtime fails with for example
|
| symbol lookup error: /usr/lib/libHYPRE_FEI.so.2.0.0: undefined symbol:
| _ZN3MPI3Win14Set_errhandlerERKNS_10ErrhandlerE
|
| After playing with nm I got
|
| nm /usr/lib/openmpi/lib/libmpi_cxx.a
| 00000000 W _ZN3MPI6Status9Set_errorEi
| 00000000 W _ZNK3MPI3Win14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZNK3MPI4Comm14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZN3MPI6Status9Set_errorEi
| 00000000 W _ZNK3MPI3Win14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZNK3MPI4Comm14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZN3MPI6Status9Set_errorEi
| 00000000 W _ZNK3MPI3Win14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZNK3MPI4Comm14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZN3MPI6Status9Set_errorEi
| 00000000 W _ZNK3MPI3Win14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZNK3MPI4Comm14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZN3MPI6Status9Set_errorEi
| 00000000 W _ZNK3MPI3Win14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZNK3MPI4Comm14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZN3MPI6Status9Set_errorEi
| 00000000 W _ZNK3MPI3Win14Set_errhandlerERKNS_10ErrhandlerE
| 00000000 W _ZNK3MPI4Comm14Set_errhandlerERKNS_10ErrhandlerE
|
| which mean that the missing symbol is registered as a weak symbol.
|
| PS: I have -lmpi++ -lmpi at the linking stage and libmpi_cxx.* are present in
| /usr/lib/openmpi/lib

I'm not sure what -lmpi++ is for -- that's not an OMPI library, at least not from the v1.2 or v1.3 series (I'd have to check versions before that; I don't remember offhand).

Is there a reason you're not using the mpiCC wrapper compiler to compile/link MPI C++ codes?

If you prefer to call the compiler directly, you might want to use "mpiCC --showme:compile" to get the compiler flags and "mpiCC -- showme:link" to get the linker flags. I say this because OMPI reserves the right to change what compiler and linker flags are required from release to release. Using the --showme:<foo> option gives you a forward-compatible way to keep compiling and linking if you choose not to use the OMPI wrapper compilers.

Here's the help output from v1.3 showing all the --showme options:

--------------------------------------------------------------------------
mpiCC [-showme[:<command,compile,link,incdirs,
              libdirs,libs,version>]] args

  -showme:command    Show command used to invoke real compiler
  -showme:compile    Show flags added when compiling
  -showme:link       Show flags added when linking
  -showme:incdirs    Show list of include dirs added when compiling
  -showme:libdirs    Show list of library dirs added when linking
  -showme:libs       Show list of libraries added when linking
  -showme:version    Show version of Open MPI
--------------------------------------------------------------------------

(both -showme and --showme work)

--
Jeff Squyres
Cisco Systems

Reply via email to