В моем VS2012 у меня есть 4 набора инструментов: v90, v100, v110 и v110_xp. Я провел простой тест с двумя проектами testlib (статическая библиотека) и testexe (консольное приложение). Интерфейс представлял собой всего одну функцию с сигнатурой void test()
. Результаты, достижения:
- testlib (v90), testexe (любой, кроме v90) -> не связывается
- testlib(v100), testexe(v110 или v110_xp) -> делает ссылку
Однако мне показалось несколько странным, что v100 и v110 могут быть связаны, поэтому я попытался немного усложнить сценарий. Теперь мой метод выглядит так: std::map<std::string, std::string> test(const std::string& arg)
. Как и ожидалось, testlib(v100) и testexe(v110) не связаны (mismatch detected for '_MSC_VER'
).
Но все же testlib (v110) и testexe (v110_xp) связаны, и полученный exe-файл работает на Windows XP. Это случайно или это поддерживаемый сценарий? Если это случайно, то приветствуется пример кода, который использует только функции, доступные в v110_xp, и нарушает эту совместимость. Мне интересно, следует ли мне развернуть две версии моей библиотеки для моих клиентов или подойдет только та, которая скомпилирована с v110.