Fwd: jextract / jpackage / JavaFX - Windows library load issue

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Feb 7 14:25:07 UTC 2022


Hi Duncan,
thanks for the workaround.

This is obviously fine for now, but IMHO, system lookup should never 
throw, regardless of the environment.

Maurizio

On 07/02/2022 13:44, Duncan Gittins wrote:
> The jpackage / JavaFX issue sounds like the one I reported in May - 
> see below. There is a workaround - depending on which Panama version 
> you are using - by editing the RuntimeHelper.lookup() call to 
> eliminate the CLinker.systemLookup(). This might introduce other 
> issues, but did not affect my own jextract / jpackage / JavaFX app.
>
> https://bugs.openjdk.java.net/browse/JDK-8281335
>
> I don't apply this workaround now for RuntimeHelper of my JavaFX / 
> jpackage app - not sure if bug still applies, I will scan my source 
> code. Also note earlier versions of jpackage messed up library path on 
> Windows.
>
> Kind regards
>
> Duncan
>
> -------- Forwarded Message --------
> Subject:     jextract / jpackage / JavaFX - Windows library load issue
> Date:     Sat, 22 May 2021 13:34:25 +0100
> From:     Duncan Gittins <duncan.gittins at gmail.com>
> To:     panama-dev at openjdk.java.net
>
>
>
> It's great to see you've released a new Panama/foreign EA - much 
> appreciated. Here is some feedback which I noticed in EA and latest 
> panama-foreign for a recent change in behaviour when using jextract / 
> jpackage together for a JavaFX application.
>
> I use jextract on 5 headers - one package per Windows library (Ole32_h 
> / Shell32 / User / Kernel32 / Advapi). My different app runs fine from 
> command line with "java", but the same jars+runtime inside jpackage 
> EXE always gives library load errors for jextract code called by a 
> JavaFX app:
>
> Caused by: java.lang.UnsatisfiedLinkError: Native Library 
> C:\Windows\System32\ucrtbase.dll already loaded in another classloader
>
>         ...
>         at 
> jdk.incubator.foreign/jdk.incubator.foreign.CLinker.systemLookup(Unknown 
> Source)
>         at duncan.win.ole.RuntimeHelper.lookup(RuntimeHelper.java:50)
>         at duncan.win.ole.Ole32_h.<clinit>(Ole32_h.java:16)
>         at duncan.panama.Ole32.CoInitialize(Unknown Source)
>
> Non-JavaFX apps using jextract code all run fine as EXE. My easy 
> workaround is to hand edit 5x RuntimeHelper.lookup() to omit use of 
> "systemLookup":
>
>     static SymbolLookup lookup() {
>         SymbolLookup loaderLookup = SymbolLookup.loaderLookup();
>         // THIS LINE CAUSES UnsatisfiedLinkError: SymbolLookup 
> systemLookup = CLinker.systemLookup();
>         return name -> loaderLookup.lookup(name) /*.or(() -> 
> systemLookup.lookup(name)) */;
>     }
>
> Do you have suggestions on what I should be doing? If nothing obvious, 
> and as I've not given much detail on reproducing this issue, I could 
> try to set up a minimal test case to help with further investigations.
>
> BTW I mentioned in different thread a few weeks ago that jpackage has 
> changed between JDK16 and JDK17. New jpackage strips the Windows 
> default library path from java.library.path,
> so you have to add "--java-options 
> -Djava.library.path=c:\\Windows\\System32" to allow jpackage to run 
> any Panama code as Windows EXE. The library load error as above 
> appears in EXEs generated by both versions of jpackage.
>
> Kind regards
>
> Duncan


More information about the panama-dev mailing list