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