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