Как мне настроить Vulkan для домкрата?

Я работаю над недавно выпущенным Vulkan Tutorial в Clojure с CIDER, и я наткнулся на небольшую загадку. Пример проекта makefile работает отлично, но у меня возникают проблемы с переводом его на Clojure.

мой build.boot файл просто указывает :source-paths и добавляет LWJGL в качестве зависимости:

(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 вместо Cc Mj я получаю UnsatisfiedLinkError потому что CIDER не устанавливает эти переменные:

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"))

Теперь, когда я снова пробую Cc Mj, это работает:

boot.user> (require '[example.core :refer [extension-count]])
nil
boot.user> (extension-count)
4

Тем не менее, это все еще не позволяет мне установить VK_LAYER_PATH, что будет довольно важно в будущем:

Мы начнем использовать слои проверки в Vulkan, и вам нужно указать библиотеке Vulkan, куда их загружать при использовании VK_LAYER_PATH переменная:

test: VulkanTest
    LD_LIBRARY_PATH=$(VULKAN_SDK_PATH)/lib VK_LAYER_PATH=$(VULKAN_SDK_PATH)/etc/explicit_layer.d ./VulkanTest

Как я могу установить эти переменные среды для cider-jack-in? Я бы предпочел не настраивать зависимости CIDER для отдельной реплики вручную в отдельном терминале, а затем подключаться к нему с помощью cider-connect, но если здесь нет другого выбора, я думаю, это то, что я должен сделать.

0 ответов

Другие вопросы по тегам