Ответ 1
.so
файлы динамические библиотеки. Суффикс означает "общий объект", потому что все приложения, связанные с библиотекой, используют один и тот же файл, вместо того, чтобы делать копию в результирующем исполняемом файле.
.a
файлы статические библиотеки. Суффикс означает "архив", потому что на самом деле это просто архив (сделанный с помощью команды ar
- предшественник tar
, который только что использовался для создания библиотек) исходных файлов .o объектов.
.la
файлы статические библиотеки, используемые пакетом libtools GNU. Вы можете найти дополнительную информацию о них в этом вопросе: Что такое файл .la для libtool для?
У статических и динамических библиотек есть свои плюсы и минусы.
Static pro: пользователь всегда использует версию библиотеки, которую вы протестировали с вашим приложением, поэтому не должно быть никаких удивительных проблем с совместимостью.
Static con: если проблема исправлена в библиотеке, вам необходимо перераспределить приложение, чтобы воспользоваться им. Однако, если это не библиотека, которую пользователи, скорее всего, будут обновлять самостоятельно, вам все равно придется это делать.
Динамический pro: объем памяти процесса меньше, потому что память, используемая для библиотеки, амортизируется среди всех процессов с использованием библиотеки.
Динамический профиль: библиотеки могут загружаться по требованию во время выполнения; это полезно для плагинов, поэтому вам не нужно выбирать плагины, которые будут использоваться при компиляции и установке программного обеспечения. Новые плагины могут быть добавлены "на лету".
Динамические библиотеки особенно полезны для системных библиотек, таких как libc
. Эти библиотеки часто должны включать код, зависящий от конкретной ОС и версии, потому что интерфейсы ядра были изменены. Если вы связали программу со статической системной библиотекой, она будет работать только в версии ОС, для которой была написана эта версия библиотеки. Но если вы используете динамическую библиотеку, она автоматически подберет библиотеку, которая установлена в вашей системе.