【问题标题】:Using lwjgl in Leiningen/Clojure在 Leiningen/Clojure 中使用 lwjgl
【发布时间】:2012-05-11 21:19:54
【问题描述】:

解决方案

(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?

$ 查找库

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已经被拉进来了。

我应该尝试哪些步骤来找出我出错的步骤?

谢谢!

【问题讨论】:

    标签: clojure


    【解决方案1】:

    由于谷歌为我的类似问题找到了这篇文章,因此在此处删除了此注释。

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

    如果您获得了 2.1.0 或更高版本,则可以修复。有关详细信息,请参阅错误。

    更新:(2013 年 8 月)

    我在 github 上有一个项目,用于在此处试验 lwjgl:https://github.com/rogerallen/hello_lwjgl

    我也在我的着色器项目中使用 LWJGL:https://github.com/overtone/shadertone 因为 Shadertone 是一个库,所以我发现我需要自己打包 native,以便为依赖 shadertone 的项目合理地安装它。

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

    【讨论】:

    • 谢谢。使用 lein 2.3.1,我设法使以下工作(不需要 :jvm-opts):- :dependencies [[org.clojure/clojure "1.4.0"] [org.lwjgl.lwjgl/lwjgl "2.9. 0"] [org.lwjgl.lwjgl/lwjgl-平台“2.9.0”:分类器“natives-osx”:native-prefix“”]]
    【解决方案2】:

    您的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/
    

    【讨论】:

      【解决方案3】:

      虽然同一个 jar 文件中的其他类正确导入,但为什么 Display 拒绝导入有点令人困惑

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

      我怀疑这个jar文件坏了,也许你可以试试不同的版本。

      我尝试通过运行来调试它

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

      然后尝试加载我在那里看到的各种类。

      lein swank 也可以完成制表符,这有助于探索类,而无需从 shell 中提取它们。

      【讨论】:

      • 等等,我不认为这解决了核心问题。我认为这表明:“如果我加载没有本机依赖项的东西,它可以工作;但我不能加载具有本机依赖项的东西。”
      • user1383359,我认为你是对的,区别在于本机依赖项。
      【解决方案4】:

      今天遇到这个问题,通过在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
      

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

      【讨论】:

        猜你喜欢
        • 2014-10-17
        • 2011-01-09
        • 2013-09-22
        • 2014-01-15
        • 1970-01-01
        • 2015-09-21
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多