在Leiningen/Clojure中使用lwjgl

9

解决方案

(1) (println (. System getProperty "java.library.path"))

这会给我一个列表,其中包含java寻找本机扩展的位置。

然后,我把lwjgl本机扩展放到那里。

对我无效的东西(可能是因为我使用不正确)

(*) setting :native-path
(*) setting :native-dependencies

问题

我的设备:

(lein deps; echo "====="; cat project.clj; echo "====="; cat src/main.clj; echo "====="; lein repl) &> log

"日志"的内容

    Copying 10 files to /Volumes/ramdisk/fail/lib
=====
(defproject
  mincase "0.0.1"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.lwjgl.lwjgl/lwjgl "2.8.2"] ]
  :repositories {"local" "/Users/x/z/maven_repo"}
  :jvm-opts ["-Xms4g"  "-Xmx4g"]
  :repl-init main
  )

=====
(ns main
 (:import org.lwjgl.opengl.Display)) 
=====
REPL started; server listening on localhost port 31235
UnsatisfiedLinkError no lwjgl in java.library.path  java.lang.ClassLoader.loadLibrary (ClassLoader.java:1860)
clojure.core=> 

注意--我已经执行了"lein deps",所以lwjgl库已经被拉入maven。我不理解的是:
(*) how do I get access to lwjgl from Clojure?
(*) more importantly, how do I debug which step this whole thing has gone wrong at?

$ find lib

lib
lib/clojure-1.4.0.jar
lib/jinput-2.0.5.jar
lib/jinput-platform-2.0.5-natives-linux.jar
lib/jinput-platform-2.0.5-natives-osx.jar
lib/jinput-platform-2.0.5-natives-windows.jar
lib/jutils-1.0.0.jar
lib/lwjgl-2.8.2.jar
lib/lwjgl-platform-2.8.2-natives-linux.jar
lib/lwjgl-platform-2.8.2-natives-osx.jar
lib/lwjgl-platform-2.8.2-natives-windows.jar

看起来lwjgl已经被引入了。

我应该尝试哪些步骤来确定我哪个步骤出错了?

谢谢!

4个回答

6

由于谷歌找到了这篇文章与我的相似问题,所以我在这里留下这个笔记。

Leiningen团队已经解决了这个问题: https://github.com/technomancy/leiningen/issues/898

如果您使用的是2.1.0或更高版本,则已经修复。有关详细信息,请参阅错误报告。

更新: (2013年8月)

我在Github上有一个项目,用于与lwjgl进行实验,地址为:https://github.com/rogerallen/hello_lwjgl

我还在我的shadertone项目中使用LWJGL,地址为:https://github.com/overtone/shadertone 因为Shadertone是一个库,我发现我需要自己打包本地文件才能让它为依赖于shadertone的项目合理安装。

如果有人能够与LWJGL的开发人员联系,那么最好让他们将原生文件放入适当的子目录中,就像lein在clojars发布中所期望的那样。

2
谢谢。我使用lein 2.3.1成功地让以下内容工作(无需:jvm-opts):- :dependencies [[org.clojure/clojure "1.4.0"] [org.lwjgl.lwjgl/lwjgl "2.9.0"] [org.lwjgl.lwjgl/lwjgl-platform "2.9.0" :classifier "natives-osx" :native-prefix ""]] - actionshrimp

4

看起来是你的LD_LIBRARY_PATH有问题。你是否包含了正确的.dll或者.so文件?

你可能需要在你的project.clj中添加类似于:native-dependencies [[lwjgl "2.8.2"]]这样的内容。

另外,你也可以尝试从你的shell中设置正确的值:

export LD_LIBRARY_PATH=/home/username/lwjgl-2.8.2/native/linux/

1

为什么Display拒绝导入有点令人困惑,尽管同一jar文件中的其他类可以正常导入。

(import '[org.lwjgl.opengl Util WindowsAWTGLCanvasPeerInfo])

我怀疑这个JAR文件已经损坏了,也许你可以尝试使用不同的版本。

我尝试通过运行调试来解决这个问题。

cd lib
jar xf lwjgl-2.8.2.jar
cd org/lwjgl/opengl/

然后尝试加载那里的各种类。

lein swank 还具有选项卡补全功能,可帮助探索类而无需从 shell 中提取它们。


等等,我认为这并没有解决核心问题。我认为这表明:“如果我加载没有本地依赖项的东西,它可以工作;但是我无法加载具有本地依赖项的东西。” - user1383359
user1383359,我认为你是对的,区别在于本地依赖项。 - Arthur Ulfeldt

1
今天遇到了这个问题,通过在project.clj中将本地目录添加到:jvm-opts中,以稍微不同的方式解决了它。
(defproject projectname "0.0.1-SNAPSHOT"
  :description "my project"
  :jvm-opts ["-Djava.library.path=native/linux"]
  :dependencies [[org.clojure/clojure "1.4.0"]])

我将最新的lwjgl版本中的jar文件复制到lib目录中,并将native目录复制到项目根目录中。目前看来似乎可以工作:

user=> (import org.lwjgl.opengl.Display)
org.lwjgl.opengl.Display

但我才刚刚开始。无论如何,希望这能帮助到其他人 :)


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