43

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?

JoshDM
  • 4,939
  • 7
  • 43
  • 72
2mac
  • 1,609
  • 5
  • 20
  • 35

3 Answers3

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
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
  • 4
    Sun / 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 and LD_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
  • 1
    Apparently 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