Статические библиотеки не связаны. Они представляют собой просто набор объектных файлов (* .obj или * .o), которые заархивированы вместе в файл библиотеки (вроде как файл tar / zip), чтобы компоновщику было проще найти нужные символы.
Статическая библиотека может вызывать функции, которые не определены (но объявлены только в файле заголовка), так как она только компилируется. Затем, когда вы связываете exe или dll, которые используют статическую библиотеку, вам нужно будет связать с другой библиотекой, которая предоставляет вызываемые из статической библиотеки, но не определена в ней.
Если вы хотите, чтобы компоновщик автоматически связывал другие библиотеки Стивена Предложение будет работать и используется очень уважаемыми библиотеками, такими как boost и stlport. Для этого поместите прагму в главный файл заголовка статической библиотеки. Вы должны включить статическую библиотеку и ее зависимые элементы.
Однако, IMO, эта функция действительно предназначена для авторов библиотек, где библиотека находится в пути к системной библиотеке, поэтому компоновщик легко ее найдет. Также в случае boost и stlport они используют эту функцию для поддержки нескольких версий одних и тех же библиотек с параметрами, определенными с помощью #define
s, где разные параметры требуют связывания разных версий библиотеки. Это означает, что пользователи с меньшей вероятностью будут настраивать boost одним способом и связываться с библиотекой, настроенной другим.
Я предпочитаю код приложения явно связывать необходимые части.
Также в случае boost и stlport они используют эту функцию для поддержки нескольких версий одних и тех же библиотек с параметрами, определенными с помощью #define
s, где разные параметры требуют связывания разных версий библиотеки. Это означает, что пользователи с меньшей вероятностью будут настраивать boost одним способом и связываться с библиотекой, настроенной другим.
Я предпочитаю код приложения явно связывать необходимые части.
Также в случае boost и stlport они используют эту функцию для поддержки нескольких версий одних и тех же библиотек с параметрами, определенными с помощью #define
s, где разные параметры требуют связывания разных версий библиотеки. Это означает, что пользователи с меньшей вероятностью будут настраивать boost одним способом и связываться с библиотекой, настроенной другим.
Я предпочитаю код приложения явно связывать необходимые части.
Компоновщик не будет автоматически вводить другие библиотеки, но вы можете использовать #pragma comment (lib, "static.lib") для упрощения процесса связывания дополнительных файлов путем добавления прагмы в ваши файлы заголовков.
Скажем, у меня есть статическая библиотека C ++, static.lib, и я хочу вызвать функции из общей библиотеки C ++, скажем shared.lib. Возможно ли это?
Да, например, когда вы вызываете функции Windows из своей статической библиотеки, они обычно берутся из какой-то динамической библиотеки, поэтому не должно быть никакой разницы.
Теперь предположим, что у меня есть еще один разделяемый lib, скажем shared2.lib, который ссылается на static.lib, но не ссылается на shared.lib. Компоновщик автоматически связать shared2.lib с shared.lib в этом случае?
Имея зависимости, подобные этой, могут вызвать проблемы позже, я бы посоветовал вам вместо этого динамически загружать библиотеки, используя LoadLibrary () , таким образом вам не нужно сохранять отслеживать такие зависимости при компиляции / компоновке.