Обновление Если вы можете собрать все вовлеченные проекты в одном решении, попробуйте следующее:
- Поместите весь проект в одну слн.
- Удалите все ссылки на статические библиотеки из свойств компоновщика или библиотеки.
- В контекстном меню для каждого проекта в обозревателе решений имеется опция «Зависимости проекта ...». Используйте его, чтобы определить зависимости между проектом.
Это должно работать. Это не отменяет ничего, что я говорил ранее, базовая модель построения программ на C / C ++ остается прежней. VS (по крайней мере 2005 и новее) достаточно умен, чтобы добавить все необходимые статические библиотеки в командную строку компоновщика. Вы можете увидеть это в свойствах проекта.
Конечно, этот метод не поможет, если вам нужно использовать уже скомпилированные статические библиотеки. Затем вам нужно добавить их все в exe или dll проект, который прямо или косвенно их использует.
Не думаю, что с этим можно что-то сделать. Вы должны удалить ссылки на другие статические библиотеки из проектов статических библиотек и добавить все необходимые проекты статических библиотек в качестве зависимостей проектов exe или dll. Вам просто придется смириться с тем, что любой проект, включающий A.lib или B.lib, также должен включать C.lib.
В качестве альтернативы вы можете превратить свои библиотеки в dll, которые обеспечивают более богатую модель.
Статически скомпилированные библиотеки просто не являются реальными библиотеками с информацией о зависимостях и т. Д., Как библиотеки DLL. Посмотрите, как при их создании вам не нужно предоставлять библиотеки, от которых они зависят? Заголовки - это все, что нужно. Увидеть? Вы даже не можете сказать, что статические библиотеки зависят от чего-либо.
Статическая библиотека - это просто архив скомпилированного и еще не связанного объектного кода. Это не единое целое. Каждый объектный файл компилируется отдельно и остается отдельной сущностью внутри библиотеки. Связывание происходит при сборке exe или dll. Вот когда вам нужно предоставить весь объектный код. Вот когда происходит разрешение всех символов и зависимостей.
Если вы добавите другие статические библиотеки в зависимости от статических библиотек, библиотекарь просто скопирует весь код вместе. Затем, при сборке exe, компоновщик выдаст вам множество предупреждений о повторяющихся символах. Возможно, вы сможете заблокировать эти предупреждения (я не знаю, как), но будьте осторожны. Это может скрывать реальные проблемы, такие как настоящие дубликаты символов с разными определениями. И если у вас есть статические данные, определенные в библиотеках, они, вероятно, все равно не будут работать.