我正在使用CIDER完成新发布的Clojure中的Vulkan 教程,但遇到了一些障碍。示例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
by时C-c M-j,我得到一个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"))
现在,当我C-c M-j再次尝试时,它可以工作:
boot.user> (require '[example.core :refer [extension-count]])
nil
boot.user> (extension-count)
4
但是,这仍然不允许我设置VK_LAYER_PATH
,这在未来将相当重要:
我们将开始在 Vulkan 中使用验证层,您需要使用
VK_LAYER_PATH
变量告诉 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
,但如果这里没有其他选项,我想这就是我必须做的。