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