Unable to load lwjgl 2.x after JDK-8200178
erik.joelsson at oracle.com
erik.joelsson at oracle.com
Thu Aug 17 14:29:45 UTC 2023
Hello Vladimir,
I just checked and the toolchain we use on Linux at Oracle (produced by
the make/devkit scripts) isn't setting --as-needed either (while the
local toolchain on my Ubuntu machine does). From my understanding of
that flag, it's not something we really want to be set. It would be
better to identify libraries that we don't actually need and stop
linking against them. If setting --no-as-needed helps fixing this issue,
then that seems like a reasonable workaround to me.
/Erik
On 8/16/23 21:44, Vladimir Petko wrote:
> Hi,
>
> It looks like Adoptium is building with CentOS 6.10[1] which does not
> append --as-needed linker flag by default. This results in the
> .gnu_version section created and the bug worked around with Temurin
> builds.
> In Debian/Ubuntu the toolchain automatically uses -as-needed by
> default so we've forced the --no-as-needed flag recently[2] to resolve
> this issue[3].
> I wonder if it is an acceptable solution to add '--no-as-needed' to
> BASIC_LDFLAGS in make/autoconf/flags-ldflags.m4 to have consistent
> linking?
>
> Best Regards,
> Vladimir.
>
> [1] https://ci.adoptium.net/job/build-scripts/job/jobs/job/jdk17u/job/jdk17u-linux-x64-temurin/lastBuild/consoleFull
> [2] https://salsa.debian.org/openjdk-team/openjdk/-/commit/b9b80f7da869be0ee42fbb2dd18486b7b0a1826c
> [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031521
>
> On Thu, Jun 29, 2023 at 7:06 PM David Holmes <david.holmes at oracle.com> wrote:
>> Hi Vladimir,
>>
>> This is not the first time this has come up:
>>
>> https://mail.openjdk.org/pipermail/build-dev/2020-February/026730.html
>>
>> but no real resolution.
>>
>> David
>>
>> On 27/06/2023 6:31 pm, Vladimir Petko wrote:
>>> Dear Maintainers,
>>>
>>> There is a bug[1] submitted in Debian that a number of games crash
>>> with the assertion
>>>
>>> Inconsistency detected by ld.so: dl-lookup.c: 107: check_match:
>>> Assertion `version->filename == NULL || ! _dl_name_match_p
>>> (version->filename, map)' failed!
>>>
>>> The investigation points to JAWT_GetAWT function from libjawt.so.
>>>
>>> In Java 8 the build system supplied a mapfile which set the symbol
>>> version for JAWT_GetAWT. It is no longer the case for Java 11+ due
>>> to JDK-8200178.
>>> If the native library was linked against Java 8 (e.g. lwjgl 2.x) then
>>> it would be linking against the versioned symbol.
>>> The assertion in the loader only fires when the version section
>>> (.gnu.version) is absent, otherwise the loader provides the default
>>> version of the function. This allows Temurin builds to work with those games.
>>>
>>> I wonder if some of the map files could be reverted for the
>>> compatibility reasons with Java 8, or it is not a recommended
>>> approach?
>>>
>>> [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031521
More information about the build-dev
mailing list