Как мне настроить 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
, но если здесь нет другого выбора, я думаю, это то, что я должен сделать.