Установка пакета из исходного кода в исходную файловую систему ram

#linux #makefile #init

#linux #makefile #инициализация

Вопрос:

Я пытаюсь установить несколько пакетов в исходную файловую систему ram. Я использую uclibc в качестве своей библиотеки C. Это может быть глупый вопрос, но…

Потребуется ли скомпилированной программе также библиотека C, установленная на initramfs ?

Прав ли я, полагая, что когда программа компилируется из исходного кода, она компилируется в какой-то исполняемый файл? Будет ли приложение на initramfs готово к запуску, как только я make install отредактирую (с правильным префиксом и предоставлением зависимостей)?

Ответ №1:

Нужна ли скомпилированной программе библиотека C — или любая другая библиотека, если уж на то пошло, — зависит от того, как она была связана.

В общем, если ваша программа была связана статически, то у нее нет никаких внешних зависимостей — ей нужно только рабочее ядро. Исполняемый код любой библиотеки, от которой он зависит, будет включен в конечный исполняемый файл.

Если, с другой стороны, он связан динамически, то ему все равно нужны совместно используемые объектные файлы библиотек, от которых он зависит. В Linux большинство объектов общего доступа к библиотекам (также известных как разделяемые библиотеки) соответствуют соглашению о наличии имени файла либо с .so расширением, либо, в общем случае, с *.so.* форматом. Например, /lib/libssl3.so и /lib/libncurses.so.5.9 являются разделяемыми библиотеками в моей системе.

Также возможно иметь исполняемый файл, который статически связан с некоторыми библиотеками и динамически связан с другими. Распространенный случай, когда это происходит, — это когда редкие или проприетарные библиотеки связаны статически, в то время как стандартные системные библиотеки связаны динамически.

Комментарии:

1. Блестящий ответ. Мне очень помогло, большое спасибо! Последний вопрос, если вы не возражаете.. Являются ли общие объектные файлы независимыми от компьютера? Например, если мой текущий дистрибутив идентичен по архитектуре моему хост-компьютеру, могу ли я просто скопировать общие объектные файлы? Еще раз спасибо