1

新しくリリースされたClojureVulkan チュートリアル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-inbyを使用すると、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.librarypathLD_LIBRARY_PATHprofile.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_PATHVulkan で検証レイヤーの使用を開始します。変数を使用して、これらをどこからロードするかを 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必要はありませんが、ここに他のオプションがない場合は、それが私がしなければならないことだと思います.

4

0 に答える 0