Skip to content

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

@catap

Description

@catap

Git commit

43a70e8

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions