Loading of shared libraries required by JFX
Armin Schrenk
armin.schrenk at skymatic.de
Wed Mar 22 10:55:45 UTC 2023
Hey everybody,
what is the recommended way for loading shared libraries required by
JFX? I have to decide between "java.library.path" and some internal path
determination of jfx.
My background: I'm a software developer of Cryptomator, a Java GUI app
to encrypt files using JFX. We are shipping the app with a custom JRE
created with jlink. A while ago, I learned on this mailing list that the
recommended way of shipping the required shared libs is by backing them
into the custom JRE using jmods. We changed our CI builds and thought
everything is working now, but another problem arose. Depending on the
used JDK, on Windows the shipped native libs were not used, but the ones
found in the system PATH variable. During investigation, we also looked
in the jfx project at the class "NativeLibLoader.class", which handles
the loading of the shared libraries. (Source:
https://github.com/openjdk/jfx/blob/19.0.2.1%2B1/modules/javafx.graphics/src/main/java/com/sun/glass/utils/NativeLibLoader.java)
The loading precedence is according to inline documentation (line 117
ff) the following:
// The search order for native library loading is:
// - try to load the native library from either ${java.home}
// (for jlinked javafx modules) or from the same folder as
// this jar (if using modular jars)
// - if the native library comes bundled as a resource it is extracted
// and loaded
// - the java.library.path is searched for the library in definition
// order
// - the library is loaded via System#loadLibrary
// - on iOS native library is staticly linked and detected from the
// existence of a JNI_OnLoad_libraryname funtion
BUT, 2 lines below there is a FIXME comment stating to eventually
discard the first step (load from java.home or jar). Hence my question:
Should we directly switch to the second or third step or does the
comment target something different?
Kind regards,
Armin
PS: Regarding the the problem using different JDKs: Azul offers its Zulu
JDK in a "JFX flavor", but this flavor is not directly compatible with
the NativeLibLoader of JFX. For more details, see
https://forums.foojay.io/forums/topic/jdkfx-fx-app-with-custom-jre-created-with-jlink/
More information about the openjfx-dev
mailing list