Skip to content

glslang: fix linking errors with glslang >= 11.0.0

This MR fixes the issue with linking libplacebo against glslang libraries with glslang 11.0.0. The issue can be reproduced on both 2.72.1 release and master branch:

/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «(anonymous namespace)::TGlslangToSpvTraverser::convertGlslangToSpvType(glslang::TType const&, glslang::TLayoutPacking, glslang::TQualifier const&, bool, bool)»:
(.text+0xcb1b): неопределённая ссылка на «glslang::TIntermediate::getMemberAlignment(glslang::TType const&, int&, int&, glslang::TLayoutPacking, bool)»
/usr/bin/ld: (.text+0xcbc8): неопределённая ссылка на «glslang::TIntermediate::getMemberAlignment(glslang::TType const&, int&, int&, glslang::TLayoutPacking, bool)»
/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «(anonymous namespace)::TGlslangToSpvTraverser::convertGlslangStructToSpvType(glslang::TType const&, glslang::TVector<glslang::TTypeLoc> const*, glslang::TLayoutPacking, glslang::TQualifier const&)»:
(.text+0xde5f): неопределённая ссылка на «glslang::TIntermediate::computeTypeLocationSize(glslang::TType const&, EShLanguage)»
/usr/bin/ld: (.text+0xeb32): неопределённая ссылка на «glslang::TIntermediate::getMemberAlignment(glslang::TType const&, int&, int&, glslang::TLayoutPacking, bool)»
/usr/bin/ld: (.text+0xeb7d): неопределённая ссылка на «glslang::TIntermediate::improperStraddle(glslang::TType const&, int, int)»
/usr/bin/ld: (.text+0xf019): неопределённая ссылка на «glslang::TIntermediate::getMemberAlignment(glslang::TType const&, int&, int&, glslang::TLayoutPacking, bool)»
/usr/bin/ld: (.text+0xf60f): неопределённая ссылка на «glslang::TIntermediate::getBaseAlignmentScalar(glslang::TType const&, int&)»
/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «(anonymous namespace)::TGlslangToSpvTraverser::visitBinary(glslang::TVisit, glslang::TIntermBinary*)»:
(.text+0x11676): неопределённая ссылка на «glslang::TIntermediate::getBaseAlignmentScalar(glslang::TType const&, int&)»
/usr/bin/ld: (.text+0x124a7): неопределённая ссылка на «glslang::TIntermediate::getBaseAlignmentScalar(glslang::TType const&, int&)»
/usr/bin/ld: (.text+0x13226): неопределённая ссылка на «glslang::TIntermediate::getBaseAlignmentScalar(glslang::TType const&, int&)»
/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «(anonymous namespace)::TGlslangToSpvTraverser::createSpvVariable(glslang::TIntermSymbol const*, unsigned int)»:
(.text+0x1c30c): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text+0x1c668): неопределённая ссылка на «glslang::TPoolAllocator::allocate(unsigned long)»
/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «glslang::GlslangToSpv(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions*)»:
(.text+0x25d63): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text+0x25d6b): неопределённая ссылка на «glslang::TPoolAllocator::push()»
/usr/bin/ld: (.text+0x25d9e): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text+0x25e11): неопределённая ссылка на «glslang::GetKhronosToolId()»
/usr/bin/ld: (.text+0x2647e): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text+0x26486): неопределённая ссылка на «glslang::TPoolAllocator::pop()»
/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «glslang::TType::setFieldName(std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char> > const&)»:
(.text._ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE[_ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE]+0x16): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text._ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE[_ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE]+0x23): неопределённая ссылка на «glslang::TPoolAllocator::allocate(unsigned long)»
/usr/bin/ld: (.text._ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE[_ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE]+0x2b): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text._ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE[_ZN7glslang5TType12setFieldNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEE]+0x98): неопределённая ссылка на «glslang::TPoolAllocator::allocate(unsigned long)»
/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «void std::vector<glslang::TArraySize, glslang::pool_allocator<glslang::TArraySize> >::_M_range_insert<__gnu_cxx::__normal_iterator<glslang::TArraySize*, std::vector<glslang::TArraySize, glslang::pool_allocator<glslang::TArraySize> > > >(__gnu_cxx::__normal_iterator<glslang::TArraySize*, std::vector<glslang::TArraySize, glslang::pool_allocator<glslang::TArraySize> > >, __gnu_cxx::__normal_iterator<glslang::TArraySize*, std::vector<glslang::TArraySize, glslang::pool_allocator<glslang::TArraySize> > >, __gnu_cxx::__normal_iterator<glslang::TArraySize*, std::vector<glslang::TArraySize, glslang::pool_allocator<glslang::TArraySize> > >, std::forward_iterator_tag)»:
(.text._ZNSt6vectorIN7glslang10TArraySizeENS0_14pool_allocatorIS1_EEE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS1_S4_EEEEvS9_T_SA_St20forward_iterator_tag[_ZNSt6vectorIN7glslang10TArraySizeENS0_14pool_allocatorIS1_EEE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS1_S4_EEEEvS9_T_SA_St20forward_iterator_tag]+0x256): неопределённая ссылка на «glslang::TPoolAllocator::allocate(unsigned long)»
/usr/bin/ld: /usr/lib64/gcc/x86_64-solus-linux/9/../../../../lib64/libSPIRV.a(GlslangToSpv.cpp.o): в функции «glslang::TType::TType(glslang::TType const&, int, bool)»:
(.text._ZN7glslang5TTypeC2ERKS0_ib[_ZN7glslang5TTypeC5ERKS0_ib]+0x1d6): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text._ZN7glslang5TTypeC2ERKS0_ib[_ZN7glslang5TTypeC5ERKS0_ib]+0x1e3): неопределённая ссылка на «glslang::TPoolAllocator::allocate(unsigned long)»
/usr/bin/ld: (.text._ZN7glslang5TTypeC2ERKS0_ib[_ZN7glslang5TTypeC5ERKS0_ib]+0x23c): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: (.text._ZN7glslang5TTypeC2ERKS0_ib[_ZN7glslang5TTypeC5ERKS0_ib]+0x249): неопределённая ссылка на «glslang::TPoolAllocator::allocate(unsigned long)»
/usr/bin/ld: (.text._ZN7glslang5TTypeC2ERKS0_ib[_ZN7glslang5TTypeC5ERKS0_ib]+0x251): неопределённая ссылка на «glslang::GetThreadPoolAllocator()»
/usr/bin/ld: src/libplacebo.so.92.p/glsl_glslang.cc.o: в функции «pl_glslang_init»:
/home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:56: неопределённая ссылка на «glslang::InitializeProcess()»
/usr/bin/ld: src/libplacebo.so.92.p/glsl_glslang.cc.o: в функции «pl_glslang_uninit»:
/home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:66: неопределённая ссылка на «glslang::FinalizeProcess()»
/usr/bin/ld: src/libplacebo.so.92.p/glsl_glslang.cc.o: в функции «pl_glslang_compile»:
/home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:95: неопределённая ссылка на «glslang::TShader::TShader(EShLanguage)»
/usr/bin/ld: /home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:98: неопределённая ссылка на «glslang::TShader::setStrings(char const* const*, int)»
/usr/bin/ld: src/libplacebo.so.92.p/glsl_glslang.cc.o: в функции «glslang::TShader::parse(TBuiltInResource const*, int, EProfile, bool, bool, EShMessages)»:
/usr/include/glslang/Public/ShaderLang.h:633: неопределённая ссылка на «glslang::TShader::parse(TBuiltInResource const*, int, EProfile, bool, bool, EShMessages, glslang::TShader::Includer&)»
/usr/bin/ld: src/libplacebo.so.92.p/glsl_glslang.cc.o: в функции «pl_glslang_compile»:
/home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:105: неопределённая ссылка на «glslang::TProgram::TProgram()»
/usr/bin/ld: /home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:100: неопределённая ссылка на «glslang::TShader::getInfoLog()»
/usr/bin/ld: /home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:107: неопределённая ссылка на «glslang::TProgram::link(EShMessages)»
/usr/bin/ld: /home/flabb/Projects/libplacebo/build/../src/glsl/glslang.cc:108: неопределённая ссылка на «glslang::TProgram::getInfoLog()»
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

With new glslang MachineIndependent and GenericCodeGen libraries need to be linked. Similar fix was implemented by philipl for FFmpeg project.

Merge request reports