JNI using Tomcat 5.5 under Mac OS X 10.4.9 on an intel mac.

Does anybody have experience with JNI with tomcat under mac os (intel)? Probably not... :-) Anyway, I thought I'd give it a shot here...

I'm doing some web-development and just switched to a macbook pro from pc.  I've installed tomcat 5.5, and eclipse 3.2. The web application I'm building is using a native library written in c++, the library is compiled into a universal binary (libMyWrapper.jnilib) and works with a stand-alone java application on the same machine. When trying to load the library from tomcat i get an unsatisfied link error: java.lang.UnsatisfiedLinkError: no MyWrapper in java.library.path. So i printed the java.library.path to the console and put the required jnilib on all those places but it still didn't work. I've also tried to load the library using System.load() and the absolute path to the jnilib without result.

I hope anyone out there can help me!
kveasanaAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Mayank SAssociate Director - Product EngineeringCommented:
>> So i printed the java.library.path to the console and put the required jnilib on all those places but it still didn't work.

Did you restart Tomcat after that? You need to....
0
kveasanaAuthor Commented:
Yes, I even restarted the machine...
0
kveasanaAuthor Commented:
It's working! Well kinda... I moved the jnilib to /usr/lib and loaded it with an absolute path using System.load("/usr/lib/libMyWrapper.jnilib");. (this only works if the jnilib is in /usr/lib and nowhere else)

The jnilib is dependent on a few other libraries, using otool i get the following output:

libMyWrapper.jnilib:
        libMyWrapper.jnilib (compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
        libxerces-c.dylib (compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.4)

Even if I copy all these libraries to the java.class.path it doesn't work, could it be because of "recursive" dependency, i.e. the libSystem.B.dylib is dependent on a library outside the java.class.path?

On the other hand I added /usr/lib to the java.class.path and still it wouldn't load...

Any ideas?

0
Mayank SAssociate Director - Product EngineeringCommented:
You don't need to add it to java.class.path - you need to add it to java.library.path
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.