как узнать версию glibc linux
Benohead’s Software Blog
Linux: Check the glibc version
If you need to check which version of the GNU C library (glibc) is used on you Linux system, whether it’s to check whether you are affected by the GHOST vulnerability or you need to install a software requiring at least a certain version but not checking it on build/installation, the easiest way is to use ldd which comes with glibc and should in most cases have the same version:
If you know you might have patched the system to use a different version of ldd and know that its version doesn’t match the glibc version, you have two additional ways to find out the glibc version:
The second way is a little bit more difficult. You first have to find which libc.so file is being used by a known program e.g. netstat:
You can also find the libc.so file used with the following command:
So we now know that /lib64/libc.so.6 is being used and we just need to get it’s version:
If you want to determine the glibc version from C program and not from a shell script, you can just use something like this:
You can then compile it and execute it like this to get the glibc version:
Of course, if your C file is not called glibc_version.c, you’ll have to use the name you’ve actually used in the gcc arguments.
Since your current shell is probably also using glibc, you can also find out which libc library it has loaded by using the following command:
Таблица соответствия GCC версий и libc в них
Есть версия GCC в нутри нее есть libc. Мне нужно знать соответстие версий обоих. Нужно типа такого: gcc 4.8 = glibc 2.5.3, gcc 5.2 = glibc 2.6.0
На сколько я помню, каждый релиз gcc содержит указание необходимых версий.
Мне нужно зная нужную версию glibc скачать gcc соответствующий ему
Какая версия glibc у вас?
Там точно не равно, а какой-то диапазон.
конкретная версия gcc может работать с разными версиями glibc
Например, вот PPA для Ubuntu 12.04, там есть gcc 11.1: https://launchpad.net/
Значит gcc 11.1 может работать как минимум от glibc2.15 до glibc2.34
Вот тут тестировали с glibc2.11
Так что gcc 11 может работать и с glibc2.11
Может и меньше возможно…
Какую gcc мне нужно установить, чтобы у нее по дефолту была 2.12.2 glibc?
Если ты будешь собирать на системе на которой glibc 2.12.2, то скорее всего любую.
Если ты будешь собирать на современном рабочем компьютере, то можешь запустить в докере систему с glibc 2.12.2 и там собрать любой gcc. Или установить из пакетного менеджера тот gcc, который шёл в той системе по умолчанию, если не нужно новые возможности С++
Если ты хочешь собирать на современном рабочем компьютере и не использовать докер, то поразбирайся тут: https://stackoverflow.com/questions/2856438/how-can-i-link-to-a-specific-glibc-version
Как мне перенастроить gcc под версию 2.12.2? Что нужно установить и как? беру образ докера gcc:4.8 ставл., и получаю segfault при вызове ldd.
Сейчас на моем железе работает исправно Ubuntu 12.04, у нее по умолчанию 2.15. Как мне переориентировать на 2.12?
Сейчас на моем железе работает исправно Ubuntu 12.04, у нее по умолчанию 2.15. Как мне переориентировать на 2.12?
Есть версия GCC в нутри нее есть libc
GCC можно скомпилировать с какой угодно версией Glibc. Например в репозитории SLES 11 доступен GCC 9. А версия GCC 10 доступна, если немного поработать напильником.
GCC можно скомпилировать с какой угодно версией Glibc
Не совсем, есть диапазоны совместимости. GCC 2.95, например, с современной glibc не соберется.
Проверить версию glibc для конкретного компилятора gcc
8 ответов
Напишите тестовую программу (назовите ее, например, glibc-version.c ):
И скомпилируйте его с помощью компилятора gcc-4.4:
Также проверьте более высокий символ управления версиями libc:
Вы можете использовать команду strings, чтобы проверить версию компилятора GLIBC. Применяется самая высокая версия.
Есть два дополнительных способа узнать версию glibc:
Проверьте версию установленного пакета glibc rpm: это, выполнив эту команду
Проверьте версию используемого файла libc.so. Этот способ немного сложнее. Вы можете проверить это по этой ссылке: Linux: проверьте версию glibc
должен предоставить вам используемый glibc.
gnu_get_libc_version обозначает версию времени выполнения библиотеки GNU C.
Расширение тестовой программы из принятого ответа:
Когда я компилирую и запускаю эту программу на компьютере, на котором я набираю этот ответ (это Mac), он печатает
Но при компиляции и запуске на ближайшем Linux-сервере он печатает
При нормальных обстоятельствах версия «времени выполнения» может быть больше, чем версия «времени компиляции», но никогда не меньше. Маловероятно, что основной номер версии когда-либо снова изменится (последний раз он менялся при «переходе к libc6» в 1997 году).
Если вы предпочитаете однострочную оболочку для вывода этих макросов, используйте:
Это дает путь. Сейчас же:
Похоже на скрипт компоновщика. libc является особенным в Linux тем, что может выполняться:
Это должно вернуть используемую версию glibc, т.е.
Что такое же, как и при запуске моей библиотеки libc