Opened 6 months ago

Closed 6 months ago

Last modified 6 months ago

#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 Douglas R. Reno, 6 months ago

Owner: changed from blfs-book to Douglas R. Reno
Status: newassigned

comment:2 by Douglas R. Reno, 6 months ago

Resolution: fixed
Status: assignedclosed

comment:3 by Xi Ruoyao, 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 Douglas R. Reno, 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 Xi Ruoyao, 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
Note: See TracTickets for help on using tickets.