Описание тега static-libraries

Статическая библиотека - это архив объектных файлов. Используемый в качестве входных данных компоновщика, компоновщик извлекает объектные файлы, необходимые для связывания.

Необходимые объектные файлы - это те, которые предоставляют компоновщику определения символов, которые он находит, без определения используются в других входных файлах. Необходимые объектные файлы и никакие другие извлекаются из архива и вводятся для связывания точно так, как если бы они были отдельными входными файлами в команде связывания, а статическая библиотека вообще не упоминалась.

Компоновщики могут различаться относительно того, влияет ли положение статической библиотеки в последовательности входных файлов на ее доступность для поиска необходимых объектных файлов. Некоторые компоновщики (например, GNUld) будет искать в статической библиотеке только для получения определений неразрешенных ссылок на символы, используемых в более ранних входных файлах. Для такого компоновщика успех требует, чтобы статическая библиотека была введена после всех других файлов, которые зависят от нее для определений символов. Другие компоновщики (например, Microsoftlink) будет искать в статической библиотеке определение любой неразрешенной ссылки на символ.

Компоновщик обычно поддерживает вариант (GNU ld: --whole-archive, РС link: /WHOLEARCHIVE), чтобы переопределить обработку статических библиотек по умолчанию и вместо этого связать все содержащиеся объектные файлы, нужны они или нет.

Статическая библиотека ничего не вносит в связывание, кроме извлеченных из нее объектных файлов, которые могут различаться в зависимости от связывания. Его следует противопоставить разделяемой библиотеке, другому виду файла с совершенно другой ролью в связывании.