【问题标题】:Slick2D test application resulting in UnsatisfiedLinkException: wrong ELFCLASSSlick2D 测试应用程序导致 UnsatisfiedLinkException: wrong ELFCLASS
【发布时间】:2015-05-10 00:56:34
【问题描述】:

我正在编写一个基于 java 的游戏,尝试使用 Slick2D。但是,当我尝试运行测试应用程序(如下)时,我得到了这个:

OpenJDK Server VM warning: You have loaded library /home/andrzej/Programming/Java/HeroesOfZether/lib/lwjgl/native/linux/liblwjgl.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/andrzej/Programming/Java/HeroesOfZether/lib/lwjgl/native/linux/liblwjgl.so: /home/andrzej/Programming/Java/HeroesOfZether/lib/lwjgl/native/linux/liblwjgl.so: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1088)
    at org.lwjgl.Sys$1.run(Sys.java:72)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
    at org.lwjgl.Sys.loadLibrary(Sys.java:96)
    at org.lwjgl.Sys.<clinit>(Sys.java:117)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
    at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
    at simpleslickgame.SimpleSlickGame.main(SimpleSlickGame.java:34)

我已经完全按照the tutorial on Slick2D 所说的做了,下载并解压了 slick 和 lwjgl 档案,创建了一个用户库,添加了运行 VM 参数,该参数引用了本地文件夹(liblwjgl.so、liblwjgl32.so、libopenal.so、libopenal32。所以),你可以看到JVM发现它们没有问题,但是它遇到了架构冲突。我在 32 位 Linux Mint 上运行 Eclipse,JDK 和所有正确安装和配置,我之前制作了一些小应用程序没有问题。 LWJGL 站点上没有单独的 32 位下载选项,并且删除名称中没有“32”的两个库会导致 UnsatisfiedLinkException:java.library.path 中没有 lwjgl。这是测试应用代码:

package simpleslickgame;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;

public class SimpleSlickGame extends BasicGame
{
    public SimpleSlickGame(String gamename)
    {
        super(gamename);
    }

    @Override
    public void init(GameContainer gc) throws SlickException {}

    @Override
    public void update(GameContainer gc, int i) throws SlickException {}

    @Override
    public void render(GameContainer gc, Graphics g) throws SlickException
    {
        g.drawString("Howdy!", 10, 10);
    }

    public static void main(String[] args)
    {
        try
        {
            AppGameContainer appgc;
            appgc = new AppGameContainer(new SimpleSlickGame("Simple Slick Game"));
            appgc.setDisplayMode(640, 480, false);
            appgc.start();
        }
        catch (SlickException ex)
        {
            Logger.getLogger(SimpleSlickGame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

谁能告诉我我做错了什么以及如何解决它?

【问题讨论】:

    标签: java eclipse opengl lwjgl slick2d


    【解决方案1】:

    这个wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch) 表示您正在尝试在 32 位 JVM 中运行 64 位 LWJGL。

    您必须切换到 64 位 JVM,或者如果您已经安装了,您可以设置 LD_LIBRARY_PATH 以使 Linux 能够找到正确的库。见[这里]

    如果您使用的是 32 位计算机,则必须切换到 32 位 LWJGL。

    进一步参考:1; 2

    【讨论】:

    • 问题是,我不知道怎么做。网站上没有单独的 32 位下载,就像我说的那样,只留下名称中带有“32”的库只会导致不满意的链接错误,离开并重命名它们也会产生错误。
    • 您是否尝试过下载最新的 LWJGL 并关注 this guide 让 SLICK 使用它们?您使用的是什么位元版本的 JDK?
    • 根据this 的说法,该项目已经死了(抱歉),但您可能会发现一个仍在开发中的分支。
    • 我搜索了一下,Slick论坛似乎很活跃,还有一个“slick2d-maven”存储库也没有被忽视,所以看起来我正在寻找的具体2D项目是仍然支持。另外,感谢您的指南,但这只是让一切变得更加复杂,因为现在我有四个不同的指南,或多或少都是官方的,每个指南都描述了要采取的其他步骤,要做的其他事情,一个说要从 lwjgl 获得本地人包,另一个说来自 Slick 包... 不是凌晨 4 点的时候会看那个,但我怀疑白天会有很多变化。
    • 在从 slick 包切换到所有内容(因为它提供了所有提到的文件)并完全忽略了 lwjgl 之后,终于发生了一些事情。我的意思是,它等待了一秒钟,然后向我抛出了一个 UnsatisfiedLinkException: can't load liblwjgl.so,在我刚刚检查过的路径上。我今天放弃了。
    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多