Когда мне нужно создать какую-то стороннюю библиотеку для использования в нескольких моих проектах с разными версиями MSVC, я обычно создаю ее для каждой версии MSVC и для обе отладки и Конфигурации выпуска. Это то, что делает boost, и это то, чем мы занимались всю нашу жизнь в моей команде.
Тем не менее, я до сих пор не понимаю, почему я не мог просто собрать эту библиотеку из чего угодно. Все, что мне нужно, это прототип функции и объектный код, верно? Поскольку я подключаю CRT статически, у меня нет внешних зависимостей. Но когда я пытаюсь связать библиотеку, встроенную в Release под MSVC8, с моим проектом в Debug под MSVC10, у меня возникают эти раздражающие «уже определенные» ошибки компоновщика, которые мы все так ненавидим.
Но почему? Могу ли я просто «инкапсулировать» все эти функции внутри библиотеки и не экспортировать их, чтобы мой проект брал из библиотеки только то, что ему нужно? Почему у меня могут быть предварительно скомпилированные версии libpng и zlib, которые я могу связать в каждом проекте? Да, я думаю, они не построены с использованием MSVC, но все же используют те же функции CRT. Так может ли кто-нибудь подробно объяснить или поделиться ссылкой на какое-то просветленное объяснение этой проблемы?