Установка более ранней минимальной версии ядра при компиляции статических библиотек
Мой дистрибутив (Arch Linux) недавно увеличил минимальную поддерживаемую версию ядра Linux для своего набора инструментов. Я компилирую веб-приложение, которое связываю статически, а затем загружаю на веб-сервер, и версия ядра на веб-сервере слишком старая для статических библиотек, скомпилированных с новым набором инструментов. (Я получаю ошибку сегментации, когда пытаюсь запустить статические двоичные файлы на сервере.) Есть ли способ компилировать приложения с использованием цепочки инструментов GNU (GCC, binutils, glibc), чтобы функции, требующие более новых версий ядра, не учитывались?
2 ответа
Совместимость с Glibc действительно гарантирована только в одном направлении. (Более старые двоичные файлы работают на более новых системах; наоборот, не обязательно.)
Чтобы гарантировать, что ваши двоичные файлы работают на старых системах, скомпилируйте линковку с более старым glibc. Самый простой способ сделать это - найти более старый дистрибутив, но я бы порекомендовал установить "кросс-инструмент" или аналогичный кросс-компилирующий набор инструментов, ориентированный на другой libc, чем тот, который использует ваша система сборки (и это позволяет повторять сборки на хостах независимо от что это за система).
Благодарю. Я также нашел параметр --enable-kernel для glibc, который позволяет работать с более ранними ядрами.