Для динамических библиотек проблем не должно быть, поскольку они следуют четко определенным ABI. Вы можете в любое время ссылаться на dll из любого компилятора.
Статические библиотеки сложнее. Насколько я знаю, Microsoft никогда не гарантировала кросс-компиляторную совместимость для них. В частности, такие функции, как генерация кода во время компоновки, как известно, нарушают совместимость между более ранними выпусками. Файлы .lib не имеют единого четко определенного формата, как это делают библиотеки DLL.
Это может сработать, потому что Microsoft редко нарушает совместимость без необходимости, но, насколько мне известно, это не гарантируется.
Конечно, если фактические функции и типы, предоставляемые DLL, не совпадают, вы столкнетесь с проблемами.
В VC11 размеры почти всех структур данных стандартной библиотеки были изменены (Microsoft наконец использует пустую оптимизацию базового класса, эффективно уменьшая размер всех контейнеров, которые используют распределитель по умолчанию.), Поэтому попытка передать std::string
из DLL, скомпилированной с помощью VC10, в модуль, скомпилированный с помощью VC11, непременно сломается.