У статических библиотек, которые зависят от других slib, нужен фактический "код" от них для работы?

Извините за неопределенное название вопроса, я просто хочу выяснить некоторые вещи.

Статические библиотеки не связаны с другими статическими библиотеками, верно?

Итак, когда я пишу slib: A, который использует функциональные возможности другого: B, все, что я должен предоставить, это заголовки от B до A, и только те, даже если A фактически использует функциональность из B? Да?

До тех пор, пока exe: X, который использует A, имеет B.lib, указанный как вход компоновщика?

Итак, в момент ссылки компоновщик принимает A.lib, который в основном знает только, что функция B вызывается где-то внутри его кода и как-то заполняет эту информацию из B.lib, делая A.lib 'whole', до того, как X будет связан с текущими рабочими частями?

Мотивация этих вопросов состоит в том, чтобы избавиться от некоторых предупреждений о компоновщиках 4006 и отбросить двойные определения, и я думаю, что это должно было сделать трюк, если это действительно правильный способ сделать это.

Ответ 1

Да, у тебя это получилось очень хорошо. Исполняемые файлы (и библиотеки DLL), которые зависят от статических библиотек, не могут быть созданы без разрешения этих зависимостей, но статические библиотеки, которые содержат зависимости от других статических библиотек, не требуют разрешения этих зависимостей при создании статической библиотеки. Фактически, процесс создания статической библиотеки вообще не связан с компоновщиком.

Ответ 2

Невозможно добавить ответ Neils, кроме как сказать, что статическая библиотека - это всего лишь целая группа объектов (.o), собранных в один индексный файл. Итак, что работает для файла .o, будет работать для статической библиотеки.