stable-diffusion.cpp icon indicating copy to clipboard operation
stable-diffusion.cpp copied to clipboard

[Bug] can't be linked against libggml which is built with `GGML_BACKEND_DL=ON`

Open catap opened this issue 2 weeks ago • 0 comments

Git commit

43a70e819b9254dee0d017305d6992f6bb27f850

Operating System & Version

OpenBSD

GGML backends

CPU

Command-line arguments used

not related

Steps to reproduce

  1. build ggml with -DGGML_BACKEND_DL=ON
  2. try to build stable-diffusion.cpp against that libggml
  3. it can't link

What you expected to happen

It links.

What actually happened

[ 84%] Linking CXX executable ../../bin/sd-cli                                                                                               19:45 [135/4239]
ld: warning: stable-diffusion.cpp(stable-diffusion.cpp.o:(generate_image_internal(sd_ctx_t*, ggml_context*, ggml_tensor*, std::__1::basic_string<char, std::_
_1::char_traits<char>, std::__1::allocator<char>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int, sd_guidance_par
ams_t, float, int, int, int, sample_method_t, std::__1::vector<float, std::__1::allocator<float>> const&, long long, int, sd_image_t, float, sd_pm_params_t, 
std::__1::vector<sd_image_t*, std::__1::allocator<sd_image_t*>>, std::__1::vector<ggml_tensor*, std::__1::allocator<ggml_tensor*>>, bool, ggml_tensor*, ggml_
tensor*, sd_easycache_params_t const*)) in archive ../../libstable-diffusion.a): warning: rand() may return deterministic values, is that what you want?     
ld: warning: zip.c(zip.c.o:(zip_archive_extract) in archive ../../libstable-diffusion.a): warning: strcpy() is almost always misused, please use strlcpy()   
ld: error: undefined symbol: ggml_backend_cpu_init                                                                                                           
>>> referenced by upscaler.cpp                                                                                                                               
>>>               upscaler.cpp.o:(UpscalerGGML::load_from_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, b
ool, int)) in archive ../../libstable-diffusion.a                                                                                                            
>>> referenced by model.cpp                                                                                                                                  
>>>               model.cpp.o:(ModelLoader::save_to_gguf_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, gg
ml_type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)) in archive ../../libstable-diffusion.a                
>>> referenced by stable-diffusion.cpp                                                                                                                       
>>>               stable-diffusion.cpp.o:(StableDiffusionGGML::init(sd_ctx_params_t const*)) in archive ../../libstable-diffusion.a                          
>>> referenced 4 more times                                                                                                                                  
                                                                                                                                                             
ld: error: undefined symbol: ggml_set_f32                                                                                                                    
>>> referenced by upscaler.cpp                                                                                                                               
>>>               upscaler.cpp.o:(UpscalerGGML::upscale(sd_image_t, unsigned int)) in archive ../../libstable-diffusion.a                                    
>>> referenced by stable-diffusion.cpp                                                                                                                       
>>>               stable-diffusion.cpp.o:(generate_image_internal(sd_ctx_t*, ggml_context*, ggml_tensor*, std::__1::basic_string<char, std::__1::char_traits<
char>, std::__1::allocator<char>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int, sd_guidance_params_t, float, in
t, int, int, sample_method_t, std::__1::vector<float, std::__1::allocator<float>> const&, long long, int, sd_image_t, float, sd_pm_params_t, std::__1::vector
<sd_image_t*, std::__1::allocator<sd_image_t*>>, std::__1::vector<ggml_tensor*, std::__1::allocator<ggml_tensor*>>, bool, ggml_tensor*, ggml_tensor*, sd_easy
cache_params_t const*)) in archive ../../libstable-diffusion.a                                                                                               
>>> referenced by stable-diffusion.cpp                                                                                                                       
>>>               stable-diffusion.cpp.o:(generate_image_internal(sd_ctx_t*, ggml_context*, ggml_tensor*, std::__1::basic_string<char, std::__1::char_traits<
char>, std::__1::allocator<char>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int, sd_guidance_params_t, float, in
t, int, int, sample_method_t, std::__1::vector<float, std::__1::allocator<float>> const&, long long, int, sd_image_t, float, sd_pm_params_t, std::__1::vector
<sd_image_t*, std::__1::allocator<sd_image_t*>>, std::__1::vector<ggml_tensor*, std::__1::allocator<ggml_tensor*>>, bool, ggml_tensor*, ggml_tensor*, sd_easy
cache_params_t const*)) in archive ../../libstable-diffusion.a                                                                                               
>>> referenced 26 more times                                                                                                                                 
                                                                                                                                                             
ld: error: undefined symbol: ggml_set_f32_1d                                                                                                                 
>>> referenced by stable-diffusion.cpp                                                                                                                       
>>>               stable-diffusion.cpp.o:(generate_image_internal(sd_ctx_t*, ggml_context*, ggml_tensor*, std::__1::basic_string<char, std::__1::char_traits<
char>, std::__1::allocator<char>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int, sd_guidance_params_t, float, in
t, int, int, sample_method_t, std::__1::vector<float, std::__1::allocator<float>> const&, long long, int, sd_image_t, float, sd_pm_params_t, std::__1::vector
<sd_image_t*, std::__1::allocator<sd_image_t*>>, std::__1::vector<ggml_tensor*, std::__1::allocator<ggml_tensor*>>, bool, ggml_tensor*, ggml_tensor*, sd_easy
cache_params_t const*)) in archive ../../libstable-diffusion.a                                                                                               
>>> referenced by stable-diffusion.cpp                                                                                                                       
>>>               stable-diffusion.cpp.o:(generate_video) in archive ../../libstable-diffusion.a                                                             
>>> referenced by stable-diffusion.cpp                                                                                                                       
>>>               stable-diffusion.cpp.o:(StableDiffusionGGML::sample(ggml_context*, std::__1::shared_ptr<DiffusionModel>, bool, ggml_tensor*, ggml_tensor*, 
SDCondition, SDCondition, SDCondition, ggml_tensor*, float, sd_guidance_params_t, float, int, sample_method_t, std::__1::vector<float, std::__1::allocator<fl
oat>> const&, int, SDCondition, std::__1::vector<ggml_tensor*, std::__1::allocator<ggml_tensor*>>, bool, ggml_tensor*, ggml_tensor*, float, sd_easycache_para
ms_t const*)) in archive ../../libstable-diffusion.a
>>> referenced 5 more times

ld: error: undefined symbol: ggml_graph_compute_with_ctx
>>> referenced by stable-diffusion.cpp
>>>               stable-diffusion.cpp.o:(copy_ggml_tensor(ggml_tensor*, ggml_tensor*)) in archive ../../libstable-diffusion.a
>>> referenced by util.cpp
>>>               util.cpp.o:(convolve(ggml_tensor*, ggml_tensor*, ggml_tensor*, int)) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_backend_is_cpu
>>> referenced by stable-diffusion.cpp
>>>               stable-diffusion.cpp.o:(StableDiffusionGGML::init(sd_ctx_params_t const*)) in archive ../../libstable-diffusion.a
>>> referenced by stable-diffusion.cpp
>>>               stable-diffusion.cpp.o:(StableDiffusionGGML::init(sd_ctx_params_t const*)) in archive ../../libstable-diffusion.a
>>> referenced by stable-diffusion.cpp
>>>               stable-diffusion.cpp.o:(StableDiffusionGGML::init(sd_ctx_params_t const*)) in archive ../../libstable-diffusion.a
>>> referenced 17 more times

ld: error: undefined symbol: ggml_cpu_has_sse3
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_avx
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_avx2
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_avx512
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_avx512_vbmi
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_avx512_vnni
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_fma
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a


ld: error: undefined symbol: ggml_cpu_has_neon
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_arm_fma
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_f16c
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_fp16_va
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_wasm_simd
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_cpu_has_vsx
>>> referenced by util.cpp
>>>               util.cpp.o:(sd_get_system_info) in archive ../../libstable-diffusion.a

ld: error: undefined symbol: ggml_backend_cpu_set_n_threads
>>> referenced by stable-diffusion.cpp
>>>               stable-diffusion.cpp.o:(GGMLRunner::compute(std::__1::function<ggml_cgraph* ()>, int, bool, ggml_tensor**, ggml_context*)) in archive ../..
/libstable-diffusion.a
c++: error: linker command failed with exit code 1 (use -v to see invocation)

Logs / error messages / stack trace

No response

Additional context / environment details

Both llama.cpp and whisper.cpp link againt such libggml without an issue.

catap avatar Dec 13 '25 18:12 catap