Hello Jeff, Eugene,
> Jeff Squyres wrote:
>
>> We use lt_dlopen() to open the plugins (Libtool's wrapper for a
>> portable dlopen). It opens all plugins (DSOs) in a private scope.
>> That private scope is kept deep in the OPAL MCA base and not exposed
>> elsewhere in the code base. So if you manually dlopen a plugin again,
>> I'll bet that the linker realizes that that DSO has already been
>> loaded into the process space and doesn't actually load it again (but
>> doesn't fail). So the dlsyms fail because you don't have access to
>> the private scope from where Libtool originally opened the DSO.
Shouldn't it work to re-dlopen the lib with RTLD_GLOBAL?
Also, recent libltdl should allow you to choose which scope you want in
the first place, local or global, through lt_dladvise.
Hope that helps.
Cheers,
Ralf
|