【发布时间】: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