如何解决“一致性检测:dl-lookup.c:111”(Java结果127)错误?

37

我目前正在尝试使用Maven为我正在开发的libGDX游戏构建Java项目。

我认为我在Ubuntu 18.04 LTS版本上使用Java 8 OpenJDK(1.8.0_211)。

相关问题debugging ld, "Inconsistency detected by ld.so"无法帮助我。Java错误代码127表明在我的CLASSPATH(?)中找不到某个资源。

以下是格式化后的错误:

[java] Inconsistency detected by ld.so: dl-lookup.c: 111: check_match: 
    Assertion `version->filename == NULL || 
    ! _dl_name_match_p (version->filename, map)' failed!
[java] Java Result: 127

3
看起来这与Ubuntu 18.04提供的Java 11版本有关:https://bugs.launchpad.net/ubuntu/+source/gcc-7/+bug/1764701 - Sebastian
在我看来很有可能你实际上正在使用OpenJDK 11而不是像你所想的那样使用OpenJDK 8。 - xjcl
3个回答

30

将OpenJDK 11降级为8

我在Xubuntu 18.04上使用Eclipse 2018-12(4.10.0),使用LibGDX时遇到了同样的问题。它一直很正常,但可能是系统中的某个更新(或专门针对OpenJDK的更新)导致了这个问题。此外,Gradle任务在Gradle窗口中也没有显示。

我通过删除以下软件包来解决问题:default-jredefault-jdkdefault-jre-headlessdefault-jdk-headless,它们都与openjdk-11相关联。

然后我安装了openjdk-8-jreopenjdk-8-jdkopenjdk-8-jre-headlessopenjdk-8-jdk-headless

并且我更改了eclipse.ini文件的vm部分:

-vm /usr/lib/jvm/java-8-openjdk-amd64/bin

现在一切正常,Gradle任务也再次显示出来。


15

将libGDX从lwjgl切换到lwjgl3

我在使用OpenJDK 11 / Java 11 (openjdk 11.0.10 2021-01-19)时遇到了与您相同的问题。解决方法是在所有地方切换到lwjgl3,这顺便还解决了其他一些问题!(当我退出应用程序时整个屏幕变黑,鼠标光标捕获只部分工作等)

build.gradle中将第一个代码块更改为第二个代码块:

api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"

还要调整导入(例如在DesktopLauncher类中):

import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;

lwjgl3 应该几乎完全兼容,在我的情况下,我只需要更新配置:

LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.samples = 8;
config.height = 720;
config.width = 1280;
config.vSyncEnabled = true;
new LwjglApplication(new RangeAnxietyGame(), config);
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
config.setBackBufferConfig(8, 8, 8, 8, 16, 0, 8);
config.setWindowedMode(1280, 720);
config.useVsync(true);
new Lwjgl3Application(new RangeAnxietyGame(), config);

这解决了我的问题,谢谢。我猜是libGDX设置启动器本身使用的是lwjgl而不是lwjgl3。你有什么想法为什么会这样吗? - Hange Zoë
不知道项目创建者为什么选择了“错误”的库。在这个网站上私信了一个libGDX专家之后,我才得到尝试lwjgl3的提示! - xjcl
你的意思是指Stack Overflow,对吧?如果有其他可以找到LibGDX专家的网站,我很想了解一下。即使你能建议任何与LibGDX相关的好网站或论坛,我也会感激不尽。 - Hange Zoë
Yeah I mean SO! - xjcl
很不幸,com.badlogic.gdx.tools.particleeditor.ParticleEditor也有硬编码的lwjgl问题。我想我需要进行分叉。 - Sebastian
1
@Sebastian 听起来很烦人。我会尝试向libGDX报告它作为一个错误,并看看他们能否修复它或提出解决方法。 - xjcl

9

使用adopt-openjdk-11替换openjdk-11

我在使用libgdx和openjdk-11的Ubuntu 20.04上也遇到了这个问题。

经过一番挣扎后,我尝试了另一个JDK供应商而不是openjdk。这解决了我的问题。出于某种原因,adopt-opendjk-11有效,而openjdk-11没有效果。


1
可以确认。我在Ubuntu 18.04.4 LTS上使用默认的OpenJDK包和名为Jzy3d的库时遇到了这个错误。在完全卸载默认的OpenJDK并切换到在此处分发的AdoptOpenJDK包后,该错误得到解决:https://adoptopenjdk.net/ - breandan
这是一个正确的解决方案。我也刚从OpenJDK-11切换到AdoptOpenJDK-11,它修复了所有问题。如果你在Linux上,你可以安装adopt-openjdk-11作为备选项,像这样: sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.0.13+8/bin/java 100 然后在需要时切换不同的jdk。 - Xceno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接