aspose file tools*
The moose likes Linux / UNIX and the fly likes Ubuntu and ld.so.conf 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 ld.so.conf vs LD_LIBRARY_PATH and java.library.path" Watch "Ubuntu and ld.so.conf vs LD_LIBRARY_PATH and java.library.path" New topic
Author

Ubuntu and ld.so.conf vs LD_LIBRARY_PATH and java.library.path

Joe Areeda
Ranch Hand

Joined: Apr 15, 2011
Posts: 318
    
    2

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 ld.so.conf 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: 14150
    
  18

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 7 API documentation
Scala Notes - My blog about Scala
Joe Areeda
Ranch Hand

Joined: Apr 15, 2011
Posts: 318
    
    2

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

here's a test program:

We can verify ld.so.conf 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 ld.so.conf

Joe
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Ubuntu and ld.so.conf vs LD_LIBRARY_PATH and java.library.path