在Leiningen / Clojure中使用lwjgl

时间:2012-05-11 21:19:55

标签: clojure

解决方案

(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

“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 个答案:

答案 0 :(得分:6)

此处删除此说明,因为谷歌发现这篇文章的相似问题。

莱宁根人现在已经解决了这个问题:https://github.com/technomancy/leiningen/issues/898

如果您获得版本2.1.0或更高版本,则它具有此修复程序。有关详细信息,请参阅错误。

更新:( 2013年8月)

我在github上有一个项目,我在这里使用lwjgl进行实验:https://github.com/rogerallen/hello_lwjgl

我也在我的shadowrtone项目中使用LWJGL:https://github.com/overtone/shadertone 因为Shadertone是一个图书馆,我发现我需要自己打包本地人,以便合理地安装依赖于shadowrtone的项目。

如果有人对LWJGL人员有所了解,那么如果他们只是将本机放入适当的子目录中,就像lein期望在他们的clojars版本中那样,那肯定会很好。

答案 1 :(得分:4)

您的LD_LIBRARY_PATH看起来有问题。您是否包含正确的.dll.so个文件?

您可能需要向:native-dependencies [[lwjgl "2.8.2"]]添加project.clj之类的内容。

或者,您可以尝试从shell中设置正确的值:

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

答案 2 :(得分: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中提取它们。

答案 3 :(得分:1)

今天进入今天,通过将原生目录添加到:jvm-opts中的project.clj来解决这个问题:

(defproject projectname "0.0.1-SNAPSHOT"
  :description "my project"
  :jvm-opts ["-Djava.library.path=native/linux"]
  :dependencies [[org.clojure/clojure "1.4.0"]])

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

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

但我只是刚开始。无论如何,希望这有助于其他人:)