Loading of shared libraries required by JFX
Kevin Rushforth
kevin.rushforth at oracle.com
Wed Mar 22 17:42:09 UTC 2023
This seems like a bug to me. Can you provide the output of running with
"java -Djavafx.verbose=true". That will show how the libraries are being
loaded. Depending on what the verbose output shows, we can file a bug to
investigate fixing it. As for your question about the first item in the
search order, I think that comment is wrong (I'll take a closer look),
since it should be using that first step for a custom jlinked JDK with
the JavaFX modules.
Can you confirm that the JavaFX libraries are in $JAVA_HOME/bin/javafx
and not in $JAVA_HOME/bin?
-- Kevin
On 3/22/2023 3:55 AM, Armin Schrenk wrote:
> 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