dlload() a library from JDK's lib/ not knowing its full path
Anthony Petrov
anthony.petrov at oracle.com
Wed Nov 23 07:21:42 PST 2011
Hello,
I'm currently working on MACOSX_PORT-176 (AWT Splashscreen support), and
I need to be able to dlopen() the splash screen dynamic library from the
native code. The library normally goes into the lib/ subdirectory of the
jdk (or jre).
I've grep'ed macosx native code for other dlopen() calls and found out
that we either load '0' (i.e. the current process itself), or use full
path names to load a couple of common libs (notably, JavaRuntimeSupport
and libGL.dylib).
Apparently, in the former case we simply assume that all the necessary
libs have already been loaded from Java code with a System.loadLibrary()
call or an equivalent. In the case of the splash screen we can't load
the library from Java because the JVM isn't started yet - the splash
screen initialization code is triggered from the Java launcher code.
Using dlopen("libsplashscreen.dylib"...) fails since the lib/ directory
isn't in the search path for the dlopen() function.
Any suggestions on how to load the library? Could I somehow retrieve the
executable's path (which must be <real_full_path_to_java>/bin/java or
whatever other launcher is used) and calculate the full path for the
library off it? Do I use argv[0] for that, or anything else specific to
the Java launcher machinery (which I'm unfamiliar with, unfortunately)?
Any other options?
--
best regards,
Anthony
More information about the macosx-port-dev
mailing list