I understand that you can set the Java library path with an option (-Djava.library.path=/path/to/libs
) before executing the program, but is there a place on the system where Java looks if you don't set it manually?
Asked
Active
Viewed 6.1k times
43
3 Answers
49
Its default value depends on the operating system:
- On Windows, it maps to
PATH
- On Linux, it maps to
LD_LIBRARY_PATH
- On OS X, it maps to
DYLD_LIBRARY_PATH

Matt Ball
- 354,903
- 100
- 647
- 710
-
3Where does this infomation come from? – Eric Feb 23 '15 at 07:11
-
5Good question, no idea. – Matt Ball Feb 23 '15 at 13:27
-
3The default value is set by [a native method in `System.java`](http://www.docjar.com/html/api/java/lang/System.java.html#521) and I don't have time to dig further into it atm. – Matt Ball Feb 23 '15 at 13:48
12
However, Matt Ball is not totally correct.
On my Linux box, my Java library path is
/usr/lib64/icedtea6/jre/lib/amd64/server:/usr/lib64/icedtea6/jre/lib/amd6ib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
While my LD_LIBRARY_PATH
is /usr/local/lib64
.

Yichao Zhou
- 465
- 1
- 4
- 8
-
4Sun / Oracle changed the behavior between 1.6 and 1.7: https://blogs.oracle.com/darcy/entry/purging_ld_library_path – gerardw Jan 28 '15 at 19:56
12
For Java 8, this differs based on OS. This is the behavior I observed:
- Windows 10/Oracle JDK 8:
java.library.path=%PATH%;.
- macOS El Capitan/Oracle JDK 8:
java.library.path=$JAVA_LIBRARY_PATH:~/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
.DYLD_LIBRARY_PATH
andLD_LIBRARY_PATH
variables are ignored. Moreover, both these variables are removed from the environment of Java applications. - Linux CentOS 7/Open JDK 8:
java.library.path=$LD_LIBRARY_PATH:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

Dima Korobskiy
- 1,479
- 16
- 26
-
1Apparently JAVA_LIBRARY_PATH still works with El Captain and jdk 8, or at least with the recent 1.8.0_162-b12 build – MxR Mar 08 '18 at 07:31