File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Linux / UNIX and the fly likes Ubuntu and vs LD_LIBRARY_PATH and java.library.path Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Engineering » Linux / UNIX
Bookmark "Ubuntu and vs LD_LIBRARY_PATH and java.library.path" Watch "Ubuntu and vs LD_LIBRARY_PATH and java.library.path" New topic

Ubuntu and vs LD_LIBRARY_PATH and java.library.path

Joe Areeda
Ranch Hand

Joined: Apr 15, 2011
Posts: 331

If the title made sense to you, you probably already understand but here's the problem.

I use NetBeans for development but any Java application that is started by the launcher has this problem.

Java searches for external dynamic libraries based on java.library.path which is set when the JVM starts from LD_LIBRARY_PATH. But Ubuntu doesn't let us set LD_LIBRARY_PATH anywhere except in the user's .profile (or .cshrc..) so it's not available to anything run from the application launcher.

Java doesn't use and bash doesn't allow dots (.) in environment variable names.

There must be a way to affect LD_LIBRARY_PATH or java.library.path for programs started by the launcher but I can't find it.

Has anyone solved this? I have come up with a few work-arounds that work for development but none I'd like to include in a release.

It's not what your program can do, it's what your users do with the program.
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 15084

I don't have my Ubuntu machine here, but I think it works like this on Ubuntu:

In /etc/ld.conf.d (the name of a directory; I'm not 100% sure this is right) there are little text files that contain library paths. The linker, ld, has a cache somewhere that is built up from those files. You can add a text file yourself in that directory (ofcourse you have to be root to put it there) with the path to your native library. After you did that, run sudo ldconfig to rebuild the cache for the linker.

See man ldconfig for more details.

Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 8 API documentation
Joe Areeda
Ranch Hand

Joined: Apr 15, 2011
Posts: 331

You are correct for most programs BUT as far as I can tell Java does not use Let's see if I can prove or disprove that.

here's a test program:

We can verify is configured correctlty with the command ldconfig -v

It outputs all the library directories and libraries configured. Edited output:

if LD_LIBRARY_PATH is not set the program produces:

If I set LD_LIBRARY_PATH, though I get:

So as far as I can tell System.loadLibrary does not use the path set by

I agree. Here's the link:
subject: Ubuntu and vs LD_LIBRARY_PATH and java.library.path
It's not a secret anymore!