SWI-Prolog / packages-jpl

JPL: The Prolog <-> Java interface
BSD 2-Clause "Simplified" License
54 stars 33 forks source link

The specified procedure could not be found #92

Closed Venorcis closed 3 years ago

Venorcis commented 3 years ago

I was looking to update from 8.3.17 to the latest 8.3.23, put JPL doesn't seem to work anymore on Windows (x64). Trying to load the new jpl.dll in Java gives a "The specified procedure could not be found" error.

JanWielemaker commented 3 years ago

Hmmm. Nothing has been changed to the JPL sources since 8.3.15. The build system has been updated to Fedora 33 (from 31) though, getting a new version of MinGW. This relates to #82. The set of support DLLs has probably changed. You can (now) find these by calling win_process_modules/1.

If that doesn't help, the daily binaries are still compiled with Fedora 31. You could check whether these still work. At least we then know for sure it is the build environment or the Prolog sources that is to be blamed.

Venorcis commented 3 years ago

Hi @JanWielemaker, The daily build indeed seems to work fine!

JanWielemaker commented 3 years ago

Good. Eventually the daily builds will also move to Fedora 33 (or later) and it would be good if we have some clue what is going wrong. Notably the GCC runtime libraries have changed. This was libgcc_s_seh-1.dll, but now seems to be libgcc_s_dw2-1.dll and libssp-0.dll. Did you update you package to deal with this change?

The way to find out on your platform is to start swipl.exe from the installed version and run

?- [library(jpl)].
?- win_process_modules(L), forall(member(M,L), writeln(M)).
Venorcis commented 3 years ago

Hi @JanWielemaker, Executing [library(jpl]] on Windows x64 gives me the same error (though with some more detail): image

JanWielemaker commented 3 years ago

Hmmm. Loads fine in the build environment (under Linux and Wine) which also uses AdoptOpenJDK. Loading on Win10 under VirtualBox which runs Oracle Java I get the same message. PL_action is defined libswipl.dll. I can't find any difference, not in the declarations nor when inspecting the dll between PLaction() and the other PL functions that do seem to work :cry: Why is developing for Windows so hard ...

JanWielemaker commented 3 years ago

It remains mostly a mystery. I think it is related to MinGW 10 provided with Fedora 33 and most likely the binutils thereof. I have little clue why and how though. I rebuild the docker image using Fedora 32 which uses MinGW 9.2. That fixes the problem.

The main drawback is that Fedora 32 is nearly end of life :cry: It might relate to https://bugzilla.redhat.com/show_bug.cgi?id=1836618

Anyway. Both daily's and releases starting with 8.3.25 will at least for a while be build using Fedora 32. I think that closes the issue for now.