Ответ 1
Статические библиотеки не связаны. Это всего лишь коллекция объектных файлов (*.obj или *.o), которые архивируются вместе в файл библиотеки (вроде файла tar/zip), чтобы облегчить компоновщику поиск необходимых символов.
Статический lib может вызывать функции, которые не определены (но объявлены только в файле заголовка), поскольку они только компилируются. Затем, когда вы связываете exe или dll, использующую статическую библиотеку lib, вам нужно будет связать ее с другой библиотекой, которая предоставляет вызов из статической библиотеки lib, но не определена в ней.
Если вы хотите, чтобы компоновщик автоматически связывал другие библиотеки, предложение Стивена будет работать и используется очень авторитетными библиотеками, такими как boost и stlport. Для этого поставьте прагму в основной файл заголовка для статической библиотеки. Вы должны включить статическую библиотеку и ее иждивенцев.
Однако IMO эта функция действительно предназначена для библиотек, где библиотека находится в пути к системной библиотеке, поэтому компоновщик легко ее найдет. Также в случае boost и stlport они используют эту функцию для поддержки нескольких версий одних и тех же библиотек с параметрами, определенными с помощью #define
, где для разных параметров требуются разные версии связанной библиотеки. Это означает, что пользователи с меньшей вероятностью настраивают boost одним способом и связывают с другой конфигурацией библиотеки.
Мое предпочтение для кода приложения - явно связать необходимые части.