Я создаю приложение на машине под управлением Linux (Debian) с ядром 2.6.26-2-amd64 и хочу запустить это приложение на другой машине под управлением Linux (Suse) с ядром 2.6.16.60-0.21-smp, но я получить ошибку «FATAL: ядро слишком старое».
Из интернет-исследований я знаю, что это может произойти при сборке библиотеки glibc, которая не была скомпилирована для поддержки старых версий ядра, но обычно это касается версии 2.4. Можно ли получить такие ошибки для ядра той же серии (2.6) или это может быть от чего-то еще?
Кроме того, я прочитал, что решение этой проблемы состоит в том, чтобы перестроить приложение под другую версию glibc, скомпилированную с соответствующей опцией --enable-kernel = VERSION. В качестве альтернативы вы можете просто динамически связать свое приложение с glibc для решения проблемы?
Спасибо за вашу помощь.
ОБНОВЛЕНИЕ : я понимаю, что мой вопрос может показаться неопределенным или решенным одним из уже упомянутых решений (динамическое связывание, построение на другой [виртуальной] системе, перестройка glibc [что кажется довольно сложным, учитывая комментарии, которые я читайте об этом]) но в конечном итоге я ищу способы предотвращения подобных проблем.
Например, можно ли найти, какие версии ядра Linux совместимы с конкретной сборкой glibc?
ОБНОВЛЕНИЕ 2 : В конце концов я нашел исходный патч для glibc (для Debian, но, думаю, в Интернете есть аналогичные документы для других дистрибутивов), который (я полагаю) содержит информацию, которую я искал.
С этой страницы :
--- eglibc-2.11.2.orig/debian/sysdeps/linux.mk
+++ eglibc-2.11.2/debian/sysdeps/linux.mk
@@ -0,0 +1,51 @@
[...]
+MIN_KERNEL_SUPPORTED := 2.6.18
[...]
+# Minimum Kernel supported
+with_headers = --with-headers=$(shell pwd)/debian/include
--enable-kernel=$(call xx,MIN_KERNEL_SUPPORTED)
[...]
Что объясняет ошибку «ядро слишком старое». Надеюсь, что это помогает другим людям.