新しくリリースされたClojureのVulkan チュートリアルをCIDERで作業していて、ちょっとした問題にぶつかりました。サンプルのmakefile プロジェクトは完全に機能しますが、Clojure に変換するのに問題があります。
私のbuild.boot
ファイルは、依存関係としてLWJGL:source-paths
を指定して追加するだけです。
(set-env!
:source-paths #{"src"}
:dependencies
(let [lwjgl-version "3.0.0"]
[['org.lwjgl/lwjgl lwjgl-version]
['org.lwjgl/lwjgl-platform lwjgl-version :classifier "natives-linux"]]))
次に、元の例で示したようにを使用src/example/core.clj
するextension-count
関数があります。vkEnumerateInstanceExtensionProperties
(ns example.core
(:import (org.lwjgl.vulkan VK10)))
(defn extension-count []
(let [^String layer-name nil
property-count (int-array 1)]
(VK10/vkEnumerateInstanceExtensionProperties layer-name property-count nil)
(first property-count)))
これで、Bash から関連する環境変数LD_LIBRARY_PATH
を設定VK_LAYER_PATH
し、REPL を起動することができます。
$ VULKAN_SDK_PATH=~/VulkanSDK/1.0.21.1/x86_64 LD_LIBRARY_PATH=$VULKAN_SDK_PATH/lib VK_LAYER_PATH=$VULKAN_SDK_PATH/etc/explicit_layer.d boot repl
boot.user=> (require '[example.core :refer [extension-count]])
nil
boot.user=> (extension-count)
4
ご覧のとおり、すべてが正しく機能しています。しかしもちろん、代わりにcider-jack-in
byを使用すると、CIDER がこれらの変数を設定していないため、次のようになります。C-c M-jUnsatisfiedLinkError
boot.user> (import (java.util.function Consumer)
(org.lwjgl.system Configuration))
org.lwjgl.system.Configuration
boot.user> (Configuration/setDebugStreamConsumer
(reify Consumer
(accept [_ message]
(println message))))
nil
boot.user> (require '[example.core :refer [extension-count]])
nil
boot.user> (extension-count)
[LWJGL] Failed to load a library. Possible solutions:
a) Set -Djava.library.path or -Dorg.lwjgl.librarypath to the directory that contains the shared libraries.
b) Add the JAR(s) containing the shared libraries to the classpath.
[LWJGL] Enable debug mode with -Dorg.lwjgl.util.Debug=true for better diagnostics.
java.lang.UnsatisfiedLinkError: Failed to locate library: libvulkan.so.1
上記のエラー メッセージで示唆されているように、 ではなくjava.library.path
またはを設定する必要がありますか? これらの変数のいずれかを次から設定できます。org.lwjgl.librarypath
LD_LIBRARY_PATH
profile.boot
(System/setProperty
"java.library.path"
(str (System/getProperty "user.home") "/VulkanSDK/1.0.21.1/x86_64/lib"))
もう一度試してみるC-c M-jと、うまくいきます:
boot.user> (require '[example.core :refer [extension-count]])
nil
boot.user> (extension-count)
4
ただし、これはまだ設定できませんVK_LAYER_PATH
。これは、将来的にはかなり重要になります。
VK_LAYER_PATH
Vulkan で検証レイヤーの使用を開始します。変数を使用して、これらをどこからロードするかを Vulkan ライブラリに指示する必要があります。test: VulkanTest LD_LIBRARY_PATH=$(VULKAN_SDK_PATH)/lib VK_LAYER_PATH=$(VULKAN_SDK_PATH)/etc/explicit_layer.d ./VulkanTest
これらの環境変数を に設定するにはどうすればよいcider-jack-in
ですか? 別のターミナルでスタンドアロンのreplのCIDERの依存関係を手動で構成してから、を使用して接続するcider-connect
必要はありませんが、ここに他のオプションがない場合は、それが私がしなければならないことだと思います.