Совместимость Glibc, GCC и binutils

Есть ли какая-то официальная документация о совместимости версий между binutils, glibc и GCC? Я нашел эту матрицу для совместимости версий binutils и GCC. Было бы неплохо иметь что-то подобное и для GCC, и для glibc.

Дело в том, что я спрашиваю об этом, потому что мне нужно знать, могу ли я собрать, скажем, скрещивание GCC 4.9.2 со «встроенным» glibc 2.2.4, чтобы иметь возможность поддерживать довольно старые цели, такие как CentOS 5.

Спасибо.


person scrutari    schedule 08.03.2016    source источник


Ответы (1)


крайне маловероятно, что вы сможете собрать такую ​​старую версию glibc с такой новой версией gcc. glibc документирует минимальную требуемую версию binutils и gcc в своем УСТАНОВИТЬ файл.

glibc-2.23 утверждает:

Recommended Tools for Compilation
GCC 4.7 or newer
GNU 'binutils' 2.22 or later

как правило, если вы хотите перейти на более новую версию, glibc обычно будет работать с версией gcc, которая находилась в разработке на момент выпуска. например glibc-2.23 был выпущен 18 февраля 2016 года, а gcc-6 в то время находился в стадии разработки, поэтому glibc-2.23 будет работать с gcc-4.7 через gcc-6.

поэтому найдите версию gcc, которую вы хотите, затем найдите дату ее выпуска, затем посмотрите на выпуски glibc примерно того же времени.

все это говорит о том, что использование старой версии glibc — ужасная идея. он будет полон известных уязвимостей безопасности (включая удаленно эксплуатируемые). например, в последнем выпуске glibc-2.23 исправлена ​​CVE-2015-7547, которая влияет на любой приложение, выполняющее разрешение сети DNS и затрагивающее версии, начиная с glibc-2.9. помните: это не единственная скрытая ошибка.

person Mike Frysinger    schedule 08.03.2016
comment
Почему вы не можете собрать более старую версию glibc с гораздо более новой версией gcc? (Это не означает, что гораздо более новая версия gcc сможет использовать указанную старую версию glibc внутри, но если бы я хотел создать исполняемый файл для CentOS 5, как говорится в OP, должен не могу ли я использовать даже, скажем, GCC 9, проверить исходный код для glibc 2.22 и собрать glibc 2.22. Затем, чтобы создать приложение для CentOS 5, я бы скомпилировал исходный код с помощью GCC 9 и, соответственно, старого -std=c99, а затем вручную связать с помощью LDFLAGS=-nostdlib и LDLIBS=-l:libc.so.2.2.2? - person Vinny; 18.10.2019
comment
было много известных проблем, из-за которых более новый gcc неправильно компилировал старый glibc, потому что glibc полагается на поведение, которое изменилось (иногда намеренно, иногда случайно). он может либо не скомпилироваться полностью, либо скомпилироваться, а затем просто вылететь при выполнении. чем дальше друг от друга выпуски, тем больше вероятность того, что это произойдет. - person Mike Frysinger; 27.03.2020