Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

From: Brian Granger (ellisonbg.net_at_[hidden])
Date: 2007-10-12 15:55:33

> My guess is that Rmpi is dynamically loading, but not
> specifying the RTLD_GLOBAL flag. This means that is not
> available to the components the way it should be, and all goes
> downhill from there. It only mostly works because we do something
> silly with how we link most of our components, and Linux is just
> smart enough to cover our rears (thankfully).

In mpi4py, is linked in at compile time, not loaded using
dlopen. Granted, the resulting mpi4py binary is loaded into python
using dlopen.

> The pt2pt component (rightly) does not have a -lmpi in its link
> line. The other components that use symbols in (wrongly)
> do have a -lmpi in their link line. This can cause some problems on
> some platforms (Linux tends to do dynamic linking / dynamic loading
> better than most). That's why only the pt2pt component fails.

Did this change from 1.2.3 to 1.2.4?

> Solutions:
> - Someone could make the pt2pt osc component link in
> like the rest of the components and hope that no one ever
> tries this on a non-friendly platform.

Shouldn't the openmpi build system be able to figure this stuff out on
a per platform basis?

> - Debian (and all Rmpi users) could configure Open MPI with the
> --disable-dlopen flag and ignore the problem.

Are there disadvantages to this approach?

> - Someone could fix Rmpi to dlopen with the RTLD_GLOBAL
> flag and fix the problem properly.

Again, my main problem with this solution is that it means I must both
link to libmpi at compile time and load it dynamically using dlopen.
This doesn't seem right. Also, it makes it impossible on OS X to
avoid setting LD_LIBRARY_PATH (OS X doesn't have rpath). Being able
to use openmpi without setting LD_LIBRARY_PATH is important.

> I think it's clear I'm in favor of Option 3.
> Brian
> _______________________________________________
> users mailing list
> users_at_[hidden]