A .a
библиотека не является "статическим объектом". Файл .a
представляет собой архив, теоретически похожий на tar
, но другого формата и генерируемый командой ar
. Каждый объект в архиве индивидуален и индивидуален. Обычно это объекты .o
, представляющие собой скомпилированные несвязанные объекты. Все символы в одном из этих .o
файлов будут включены в другие файлы во время компоновки (ld
). Но не все объекты в архиве понадобятся при связывании, символы в других объектных файлах не будут видны в связанном файле.
Например, в libdialog.a
имеются mouse.o
и columns.o
объектные файлы. Ваша программа использует столбцы, но не функции мыши. Таким образом, ваша программа включает все символы в columns.o
, но ни один из символов в mouse.o
не включен.
С «общим объектом» (.so
) это отдельный объект, поэтому при связывании с ним будут включены все символы в объекте, необходимые или нет. В приведенном выше примере, если мы ссылаемся на libdialog.so
, программа будет включать символы как columns.o
, так и mouse.o
, даже если код на основе мыши не используется.
При создании общего объекта (.so
) те же правила связывания применяются при использовании архива (.a
). Таким образом, файл .so
будет включать только символы в файлах .o
в используемом архиве.