Where would one put a JNI module in Linux or OS X

The Java application has the JNI module to use.

Where should a user (or an installation script of this application) put the JNI module on Linux (Ubuntu) or on MacOS X so that this JNI module could be loaded without specifying the path to the module in code?

Upvotes: 0

Views: 347

Answers (2)

Neil Masson
Neil Masson

Reputation: 2689

Put the compiled libraries (.so files on Linux or .dylib on MacOS) into a directory of your choice and include this directory in the library search path LD_LIBRARY_PATH used to start your JVM.

Upvotes: 2

This is a link to a detailed explanation of shared objects and how they are searched for by the OS.

I wish Java people would stop using LD_LIBRARY_PATH and start using the existing directory structures and the ld.so.conf mechanism. Even the OpenJDK libraries are dumped in a place that's not on a standard path and they don't add an ld.so.conf file either ( just how hard is that ? ).

This approach avoids the need to set up your own LD_LIBRARY_PATH and launch via a shell script.

If a required shared object is to be installed, first test for somewhere like /usr/local/lib as an installation choice system wide, and if it exists and an existing file does not already use your file's name, then put your library there. A more systematic approach would be to check all the ld.so.conf files and see if any of the directories match something you know can be used. A shell script can do that at install time.

Upvotes: 3

Related Questions