Thanks Kihwal! This was an excellent suggestion and worked great!

Should have the Java bindings out shortly...

On Jan 31, 2012, at 4:35 PM, Kihwal Lee wrote:

> There might be other tricks you can play with CL, but here is my idea: You 
> could have the initial jni native lib to become a sort of wrapper to dlopen() 
> the real thing (the one plug-ins depend on) with RTLD_GLOBAL, so that the 
> fact that the jni library is loaded in a specific name space does not matter.
> 
> Kihwal
> 
> On 1/31/12 4:34 PM, "Ralph Castain" <r...@open-mpi.org> wrote:
> 
> I was able to dig further into this, and we believe we finally tracked this 
> down to root cause. It appears that java loads things into a private, as 
> opposed to global, namespace. Thus, the Java MPI bindings load the initial 
> libmpi just fine.
> 
> However, when libmpi then attempts to load the individual plug-ins beneath 
> it, the load fails due to "unfound" symbols. Our plug-ins are implemented as 
> individual dll's, and reference symbols from within the larger libmpi above 
> them. In order to find those symbols, the libraries must be in the global 
> namespace.
> 
> We have a workaround - namely, to disable dlopen so all the plug-ins get 
> pulled up into libmpi. However, this eliminates the ability for a vendor to 
> distribute a binary, proprietary plug-in that we "absorb" during dlopen. For 
> the moment, this isn't a big deal, but it could be an issue down the line. We 
> have some ideas on how to resolve it internally, but it would take a fair 
> amount of work, and have some side-effects.
> 
> Does anyone know if it is possible to convince java to use the global 
> namespace? Or can you point me to someone/someplace where I should explore 
> the question?
> 
> Thanks
> Ralph
> 
> On Jan 30, 2012, at 5:13 PM, Kihwal Lee wrote:
> 
>> It doesn't have to be static.
>> Do architectures match between the node manager jvm and the library?
>> If one is 32 bit and the other is 64, it won't work.
>> 
>> Kihwal
>> 
>> On 1/30/12 5:58 PM, "Ralph Castain" <r...@open-mpi.org> wrote:
>> 
>> Hi folks
>> 
>> As per earlier emails, I'm just about ready to release the Java MPI 
>> bindings. I have one remaining issue and would appreciate some help.
>> 
>> We typically build OpenMPI dynamically. For the Java bindings, this means 
>> that the JNI code underlying the Java binding must dynamically load OMPI 
>> plug-ins. Everything works fine on Mac. However, on Linux, I am getting 
>> dynamic library load errors.
>> 
>> I have tried setting -Djava.library.path and LD_LIBRARY_PATH to the correct 
>> locations. In both cases, I get errors from the JNI code indicating that it 
>> was unable to open the specified dynamic library.
>> 
>> I have heard from one person that JNI may need to be built statically, and I 
>> suppose it is possible that Apple's customized Java implementation 
>> specifically resolved that problem. However, all the online documentation I 
>> can find indicates that Java on Linux should also be able to load dynamic 
>> libraries - but JNI is not specifically addressed.
>> 
>> Can any of you Java experts provide advice on this behavior? I'd like to get 
>> these bindings released!
>> 
>> Thanks
>> Ralph
>> 
>> 
> 
> 

Reply via email to