#20470 closed defect (fixed)
libplacebo FTBFS with glslang-15.0.0
Reported by: | Douglas R. Reno | Owned by: | Douglas R. Reno |
---|---|---|---|
Priority: | normal | Milestone: | 12.3 |
Component: | BOOK | Version: | git |
Severity: | normal | Keywords: | |
Cc: |
Description ¶
I needed to install libplacebo so I could build the new MPV, and I ran into the following build error:
[161/168] Linking target src/tests/test.string.c
FAILED: src/tests/test.string.c c++ -o src/tests/test.string.c src/libplacebo.so.349.p/cache.c.o src/libplacebo.so.349.p/colorspace.c.o src/libplacebo.so.349.p/common.c.o src/libplacebo.so.349.p/convert.cc.o src/libplacebo.so.349.p/dither.c.o src/libplacebo.so.349.p/dispatch.c.o src/libplacebo.so.349.p/dummy.c.o src/libplacebo.so.349.p/filters.c.o src/libplacebo.so.349.p/format.c.o src/libplacebo.so.349.p/gamut_mapping.c.o src/libplacebo.so.349.p/glsl_spirv.c.o src/libplacebo.so.349.p/gpu.c.o src/libplacebo.so.349.p/gpu_utils.c.o src/libplacebo.so.349.p/log.c.o src/libplacebo.so.349.p/options.c.o src/libplacebo.so.349.p/pl_alloc.c.o src/libplacebo.so.349.p/pl_string.c.o src/libplacebo.so.349.p/swapchain.c.o src/libplacebo.so.349.p/tone_mapping.c.o src/libplacebo.so.349.p/utils_dolbyvision.c.o src/libplacebo.so.349.p/utils_frame_queue.c.o src/libplacebo.so.349.p/utils_upload.c.o src/libplacebo.so.349.p/glsl_glslang.cc.o src/libplacebo.so.349.p/glsl_glslang_resources.c.o src/libplacebo.so.349.p/glsl_spirv_glslang.c.o src/libplacebo.so.349.p/opengl_context.c.o src/libplacebo.so.349.p/opengl_formats.c.o src/libplacebo.so.349.p/opengl_loader_gl.c.o src/libplacebo.so.349.p/opengl_loader_egl.c.o src/libplacebo.so.349.p/opengl_gpu.c.o src/libplacebo.so.349.p/opengl_gpu_tex.c.o src/libplacebo.so.349.p/opengl_gpu_pass.c.o src/libplacebo.so.349.p/opengl_swapchain.c.o src/libplacebo.so.349.p/opengl_utils.c.o src/libplacebo.so.349.p/vulkan_command.c.o src/libplacebo.so.349.p/vulkan_context.c.o src/libplacebo.so.349.p/vulkan_formats.c.o src/libplacebo.so.349.p/vulkan_gpu.c.o src/libplacebo.so.349.p/vulkan_gpu_buf.c.o src/libplacebo.so.349.p/vulkan_gpu_tex.c.o src/libplacebo.so.349.p/vulkan_gpu_pass.c.o src/libplacebo.so.349.p/vulkan_malloc.c.o src/libplacebo.so.349.p/vulkan_swapchain.c.o src/libplacebo.so.349.p/vulkan_utils.c.o src/libplacebo.so.349.p/meson-generated_.._renderer.c.o src/libplacebo.so.349.p/meson-generated_.._shaders.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_colorspace.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_custom.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_custom_mpv.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_deinterlacing.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_dithering.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_film_grain.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_film_grain_av1.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_film_grain_h274.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_icc.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_lut.c.o src/libplacebo.so.349.p/meson-generated_.._shaders_sampling.c.o src/libplacebo.so.349.p/meson-generated_.._vulkan_utils_gen.c.o src/tests/test.string.c.p/string.c.o -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -Wl,--exclude-libs=ALL -Wl,--start-group -lm -pthread /usr/lib/libunwind.so -ldl -lglslang-default-resource-limits /usr/lib/libSPIRV.so /usr/lib/libvulkan.so /usr/lib/liblcms2.so -Wl,--end-group /usr/bin/ld: src/libplacebo.so.349.p/glsl_glslang.cc.o: in function `pl_glslang_init':
glslang.cc:(.text+0x41): undefined reference to `glslang::InitializeProcess()'
/usr/bin/ld: src/libplacebo.so.349.p/glsl_glslang.cc.o: in function `pl_glslang_uninit':
glslang.cc:(.text+0x79): undefined reference to `glslang::FinalizeProcess()'
/usr/bin/ld: src/libplacebo.so.349.p/glsl_glslang.cc.o: in function `pl_glslang_compile':
glslang.cc:(.text+0x105): undefined reference to `glslang::TShader::TShader(EShLanguage)'
/usr/bin/ld: glslang.cc:(.text+0x140): undefined reference to `glslang::TShader::setStrings(char const* const*, int)'
/usr/bin/ld: glslang.cc:(.text+0x1c2): undefined reference to `glslang::TShader::parse(TBuiltInResource const*, int, EProfile, bool, bool, EShMessages, glslang::TShader::Includer&)'
/usr/bin/ld: glslang.cc:(.text+0x1e1): undefined reference to `glslang::TProgram::TProgram()'
/usr/bin/ld: glslang.cc:(.text+0x216): undefined reference to `glslang::TProgram::link(EShMessages)'
/usr/bin/ld: glslang.cc:(.text+0x25b): undefined reference to `glslang::GlslangToSpv(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, glslang::SpvOptions*)'
/usr/bin/ld: glslang.cc:(.text+0x2dc): undefined reference to `glslang::TProgram::getInfoLog()'
/usr/bin/ld: glslang.cc:(.text+0x30c): undefined reference to `glslang::TShader::getInfoLog()'
collect2: error: ld returned 1 exit status
I suspect this might be related to some of the cleanup that was done in glslang-15.0.0. I was able to work around it by adding "cxx.find_library('glslang', required: false)" to src/glsl/meson.build (and adding a comma at the end of "cxx.find_library('glslang-default-resource-limits', required: false)"
The following seds will accomplish that:
sed -i "20s/$/,/" src/glsl/meson.build && sed -i "21i cxx.find_library('glslang', required: false)" src/glsl/meson.build
Change History (5)
comment:1 by , 6 months ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:2 by , 6 months ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:3 by , 6 months ago
But at least one of the "missing symbol" is in my build:
$ objdump -t --demangle /usr/lib/libglslang.so.15 | grep FinalizePro 00000000001050e0 g F .text 0000000000000005 glslang::FinalizeProcess()
Hmm and "-lglslang-default-resource-limits" looks bizarre for me. It looks like meson has somehow found a wrong library.
comment:4 by , 6 months ago
When reading the meson.build file, it was only pulling in libglslang-default-resource-limits, but it wasn't pulling in libglslang. I suspect that probably worked for 14.x, but changed when 15.0 came out
comment:5 by , 6 months ago
But in my 14.x build glslang::FinalizeProcess() does not exist in libglslang-default-resource-limits too:
$ objdump -t --demangle /usr/lib/libglslang-default-resource-limits.so.14 | grep FinalizeProcess || echo nothing nothing
Fixed at db57c3ea9ce03981df608bc30f4f8ce33c047dd6