В чем разница между GNU_LIBC_VERSION и GNU_NPTL_VERSION?
Обратите внимание на следующие два параметра конфигурации системы RedHat Linux:
$ getconf GNU_LIBC_VERSION
glibc 2.3.4
$ getconf GNU_LIBPTHREAD_VERSION
NPTL 2.3.4
Я вижу, что они соответствуют некоторым библиотекам TLS:
/lib/tls/libc-2.3.4.so
/lib/tls/libm-2.3.4.so
/lib/tls/libpthread-2.3.4.so
/lib/tls/librt-2.3.4.so
Я хотел бы сделать ссылку на эти библиотеки вместо /usr/lib
эквиваленты. У меня есть несколько вопросов:
- Я видел это на RedHat и Debian. Он существует во всех дистрибутивах GNU Linux?
- Есть ли случай, когда
GNU_LIBC_VERSION
отличается отGNU_LIBPTHREAD_VERSION
? - Безопасны ли эти переменные для определения общих библиотек в
/lib/tls
? Я хотел бы автоматизировать это в Makefile, а не жестко кодировать магический номер версии glibc/pthread.
1 ответ
Решение
Проект NPTL, который впервые реализовал pThreads в Linux, был отдельным проектом, изначально добавляющим поддержку ядра и предоставляющим собственную библиотеку.
Когда он стал достаточно стабильным, он был объединен с glibc. Я бы предположил, что эти две версии идентичны на всех достаточно современных установках.
На Ubuntu 8.10 вывод выглядит так:
$ getconf GNU_LIBC_VERSION glibc 2.8.90 $ getconf GNU_LIBPTHREAD_VERSION NPTL 2.8.90