/// In glibc 2.32 new version of some symbols had been added [1]: /// /// $ nm -D clickhouse | fgrep -e @GLIBC_2.32 /// U pthread_getattr_np@GLIBC_2.32 /// U pthread_sigmask@GLIBC_2.32 /// /// [1]: https://www.spinics.net/lists/fedora-devel/msg273044.html /// /// Right now ubuntu 20.04 is used as official image for building /// ClickHouse, however once it will be switched someone may not be happy /// with that fact that he/she cannot use official binaries anymore because /// they have glibc < 2.32. /// /// To avoid this dependency, let's force previous version of those /// symbols from glibc. /// /// Also note, that the following approach had been tested: /// a) -Wl,--wrap -- but it goes into endless recursion whey you try to do /// something like this: /// /// int __pthread_getattr_np_compact(pthread_t thread, pthread_attr_t *attr); /// GLIBC_COMPAT_SYMBOL(__pthread_getattr_np_compact, pthread_getattr_np) /// int __pthread_getattr_np_compact(pthread_t thread, pthread_attr_t *attr); /// int __wrap_pthread_getattr_np(pthread_t thread, pthread_attr_t *attr) /// { /// return __pthread_getattr_np_compact(thread, attr); /// } /// /// int __pthread_sigmask_compact(int how, const sigset_t *set, sigset_t *oldset); /// GLIBC_COMPAT_SYMBOL(__pthread_sigmask_compact, pthread_sigmask) /// int __pthread_sigmask_compact(int how, const sigset_t *set, sigset_t *oldset); /// int __wrap_pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset) /// { /// return __pthread_sigmask_compact(how, set, oldset); /// } /// /// b) -Wl,--defsym -- same problems (and you cannot use version of symbol with /// version in the expression) /// c) this approach -- simply add this file with -include directive. #if defined(__amd64__) #define GLIBC_COMPAT_SYMBOL(func) __asm__(".symver " #func "," #func "@GLIBC_2.2.5"); #elif defined(__aarch64__) #define GLIBC_COMPAT_SYMBOL(func) __asm__(".symver " #func "," #func "@GLIBC_2.17"); #else #error Your platform is not supported. #endif GLIBC_COMPAT_SYMBOL(pthread_sigmask) GLIBC_COMPAT_SYMBOL(pthread_getattr_np)