Версии libc связаны с версиями ядра?

Прочитав ответы на мой предыдущий вопрос, я пришел к выводу, что на самом деле я искал ответ на следующий вопрос:

Требуется ли для конкретной версии ядра определенная версия libc для правильной работы?

В основном моя проблема связана с созданием приложения на моей 12.04 Ubuntu и попыткой запустить его на 8.04. С тех пор я узнал от этого и других форумов stackexchange, что причиной этих проблем является обратная совместимость libc. Поэтому то, что я, возможно, наивно пытаюсь сделать, - это создать ту же версию libc, которая существует на моей цели, а затем ссылаться на нее на моем хосте при создании приложения. Затем в идеальном мире, когда я копирую это на хост, будучи привязанным к "правильному" libc, оно должно работать (по крайней мере, в моей голове). Я был совершенно не в состоянии найти способ установить более старую версию libc в моей системе, и мне было интересно, тесно ли связана каждая версия с версией ядра, отсюда и вышеупомянутый вопрос.

2 ответа

Решение

Требуется ли для конкретной версии ядра определенная версия libc для правильной работы?

Да, если вы сами не соберете ядро ​​из исходных текстов с предпочитаемой вами версией libc. Ядра Ubuntu построены на выпуске LTS перед целевым выпуском, поэтому "новейшими" ядрами Ubuntu, совместимыми с 8.04 libc, были ядра для Ubuntu 9.10.

Они связаны друг с другом, в некотором роде.

  • Ядро, на котором вы работаете, было скомпилировано с определенной библиотекой libc.
  • Ваш libc был скомпилирован для поддержки только ядер выше определенной версии.

Поэтому, если вы устанавливаете пакеты ядра и пакеты libc из репозиториев Ubuntu, а не собираете их сами, вы застряли с вышеуказанной дилеммой.

Что касается libc, один из способов сделать то, что вы предлагаете, - это скомпилировать ядро ​​12.04 из исходного кода 8.04, связав его с libc 8.04. Затем вы используете это пользовательское ядро ​​для загрузки 12.04, после чего вы компилируете версию libc 8.04, также из исходного кода. Вы устанавливаете это, и ваши приложения должны использовать ту же старую версию 8.04 libc.

Я предполагаю, что вы также знаете, что любые другие библиотеки 12.04, с которыми связано ваше приложение, могут быть недоступны в 8.04, поэтому вам придется также компилировать их из исходного кода...

Подводя итог, лучше просто скомпилировать 8.04.

Другие вопросы по тегам