Commit 08b1d2aea for llama.cpp
commit 08b1d2aea577ed407c11ab13fbb174a28f6e65dd
Author: Erik Winter <93544977+ewintr@users.noreply.github.com>
Date: Wed Sep 23 07:13:01 2026 +0200
vulkan: hide internal symbols to prevent duplicate-dlopen state destruction (#29139)
Since #28732 our internal symbols are exported. A duplicate copy dlopened and
dlclosed by ggml_backend_load_all() then interposes them, so its destructors
destroy the live vk_instance and later device queries hit the GGML_ASSERT on
vk_instance.device_indices. Hidden visibility exports only GGML_BACKEND_API,
as before #28732.
Fixes #29138
Assisted-by: henk:claude-fable-5
diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt
index af951a2bd..d7dec92a6 100644
--- a/ggml/src/ggml-vulkan/CMakeLists.txt
+++ b/ggml/src/ggml-vulkan/CMakeLists.txt
@@ -69,6 +69,11 @@ if (Vulkan_FOUND)
ggml-vulkan-debug.cpp
)
+ # hide symbols, so dlclosed duplicate copies cannot interpose them
+ set_target_properties(ggml-vulkan PROPERTIES
+ CXX_VISIBILITY_PRESET hidden
+ VISIBILITY_INLINES_HIDDEN ON)
+
set(VULKAN_SHADER_GEN_CMAKE_ARGS "")
# Test all shader extensions