【问题标题】:Game can't find a native library - jinput-linux64游戏找不到本机库 - jinput-linux64
【发布时间】:2012-06-08 21:01:04
【问题描述】:

我目前正在开发基于 Slick2D 的游戏,但遇到了问题。
当我尝试运行我的游戏时(无论是从 dist 还是 ide),我都会收到以下错误:

java.lang.UnsatisfiedLinkError: no jinput-linux64 in java.library.path

我的目录结构如下:
./lib 包含库的所有 .jar
./natives 包含 .dll、.so 和 .jnilib

如果我转到项目选项,并将-Djava.library.path=./natives 添加到 VM 选项,它可以正常工作。但在这种情况下,我需要将所有本机库都放在 dist 的根文件夹中。所以我想为所有本地人创建一个单独的文件夹,所以我的第一行在我的 main 中有这样的:

System.setProperty("org.lwjgl.librarypath", System.getProperty("user.dir") + "/natives");

但由于某种原因,这并没有给出标准链接错误(例如 lwjgl not found),但由于某种原因选择了jinput-linux64,但 jinput 作为库添加并位于natives 文件夹中。

我做错了什么还是有更好的方法来有效地整体分发我的游戏?

谢谢!

【问题讨论】:

  • 一方面,硬编码文件分隔符“/natives”是个坏主意。使用 System.getProperty 获取平台文件分隔符。
  • 您能详细说明一下吗?

标签: java netbeans lwjgl slick2d


【解决方案1】:

在您的发行版中放置本机库有什么问题?你不能依赖你的听众来拥有你的应用程序需要的库。以下是我如何分发我用 slick 制作的东西的方式:

MyFancyGame (Top directory)
-- libraries (mine and slick and lwjgl jars here)
   -- lwjgl 
      -- native (dlls and so files go in here)

在顶层目录中,我包含了一个 shell 脚本和一个包含一行的批处理文件:

java -ea -Djava.library.path="libraries/lwjgl/native/" -cp  "libraries/*" com.MyGame.Main

这适用于我部署到的每台计算机,只要它们安装了 java。

【讨论】:

  • 但这就是我所做的。除了我在“lib”文件夹中有一个单独的“natives”文件夹,而不是在其中。而这个带有批处理文件的东西,会不会使分发给不懂技术的人变得更糟?
  • 人们甚至不知道它是一个批处理文件,扩展名隐藏在 Windows 中。只需将其命名为“RunGame”。人们会自动双击它,它会起作用。双击一个罐子不起作用。使用 webstart 完全烂透了。除了通过一堆箍让您的 java 程序成为 windows 可执行文件之外,我发现批处理文件是 windows 最方便和可靠的解决方案。您不必担心您的 Linux 用户,他们通常不需要被勺子喂食。
  • 如果你真的不想要一个批处理文件,你可以为你的 jar 创建一个快捷方式并将 java -ea blah blah 命令放在那里。这也适用于 Windows。
猜你喜欢
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2013-10-05
  • 1970-01-01
相关资源
最近更新 更多