Использование lwjgl в Leiningen / Clojure

Solution
<code>(1) (println (. System getProperty "java.library.path"))
</code>

Это дает мне список мест, где Java ищет собственные расширения.

Затем я взял собственные расширения lwjgl и поместил их туда.

Things that didn't work for me (probably because I used them incorrectly)
<code>(*) setting :native-path
(*) setting :native-dependencies
</code>
Problem

Моя настройка:

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

содержимое "журнала"

<code>    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=> 
</code>

Примечание. Я уже выполнил «lein deps», поэтому библиотека lwjgl была перенесена в maven. Что я не понимаю, так это:

<code>(*) how do I get access to lwjgl from Clojure?
(*) more importantly, how do I debug which step this whole thing has gone wrong at?
</code>

$ find lib

<code>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
</code>

Таким образом, кажется, что lwjgl был втянут

Какие шаги я должен попытаться выяснить, на каком шаге я ошибся?

Спасибо!

Ответы на вопрос(4)

Это немного сбивает с толку, почемуDisplay отказывается импортировать, хотя другие классы в том же jar-файле импортируются правильно

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

Я подозреваю, что этот файл JAR не работает, возможно, вы могли бы попробовать другую версию.

Я попытался отладить это, запустив

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

а затем пытается загрузить различные классы, которые я вижу там.

lein swank также выполняет завершение табуляции, которое может помочь в изучении классов без извлечения их из оболочки.

 12 мая 2012 г., 01:24
user1383359, я думаю ваше право, разница в родных зависимостях.
 user138335912 мая 2012 г., 01:13
Подождите, я не думаю, что это решает основную проблему. Я думаю, что это показывает: «Если я загружаю вещи без собственных зависимостей, это работает; но я не могу загружать вещи с нативными зависимостями.

Бросив эту заметку сюда, так как Google нашел этот пост для моего аналогичного вопроса.

Люди Leiningen теперь обратились к этому:https://github.com/technomancy/leiningen/issues/898

Если вы получаете версию 2.1.0 или более позднюю, в ней есть исправление. Смотрите ошибку для деталей.

UPDATE: (Aug 2013)

У меня есть проект на github, который я использую для экспериментов с lwjgl здесь:https://github.com/rogerallen/hello_lwjgl

Я также использую LWJGL в своем проекте шейдертон:https://github.com/overtone/shadertone Поскольку Shadertone - это библиотека, я обнаружил, что мне нужно самостоятельно упаковать нативы, чтобы она была разумно установлена для проектов, зависящих от shadertone.

Если у кого-то есть какие-то отношения с людьми из LWJGL, было бы неплохо, если бы они просто помещали туземцев в соответствующие подкаталоги, как и ожидал lein в своих релизах clojars.

 14 авг. 2013 г., 22:58
Благодарю. С lein 2.3.1 мне удалось заставить работать следующее (без необходимости: jvm-opts): -: зависимости [[org.clojure / clojure & quot; 1.4.0 & quot;] [org.lwjgl.lwjgl / lwjgl & quot; 2.9.0 "] [org.lwjgl.lwjgl / lwjgl-platform" 2.9.0 " : классификатор & quot; natives-osx & quot; : native-prefix & quot; & quot;]]

Наткнулся на это сегодня, решил по-другому, добавив родную директорию в: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

Но я только начинаю. Во всяком случае, надеюсь, что это помогает кому-то еще :)

Решение Вопроса

Похоже, проблема с вашимLD_LIBRARY_PATH, Вы в том числе правильно.dll или же.so файлы?

Вам, вероятно, нужно добавить что-то вроде:native-dependencies [[lwjgl "2.8.2"]] на вашproject.clj.

В качестве альтернативы, вы можете попробовать установить правильное значение из вашей оболочки:

export LD_LIBRARY_PATH=/home/username/lwjgl-2.8.2/native/linux/
 user138335912 мая 2012 г., 01:38
Этот ответ наиболее близок к рабочему решению.

Ваш ответ на вопрос