Зачем мне нужны специальные библиотеки (двоичные файлы), созданные для каждой версии Visual C ++? - PullRequest
2 голосов
/ 21 августа 2010

Существует множество библиотек C ++ (большинство?), Которые поставляются со специальными двоичными файлами, созданными для каждой версии Visual C ++ (2003, 2005, 2008, 2010).

В чем проблема при связывании библиотеки C ++, созданной для Visual C ++ 2008, с Visual C ++ 2010?

Ответы [ 2 ]

2 голосов
/ 21 августа 2010

Обычная проблема заключается в том, что код, сгенерированный в разных версиях Visual Studio, использует разные версии библиотек времени выполнения.

В зависимости от того, как разработана библиотека, это часто может вызывать проблемы, поскольку существует несколько версий(например) функции выделения и освобождения, и может быть легко получить ошибки кучи, когда указатель, выделенный в одной библиотеке времени выполнения, передается функции освобождения из другой.Это может произойти независимо от того, связаны ли библиотеки времени выполнения динамически или статически.

Даже если эта проблема решается из-за хорошего дизайна библиотеки, все равно неэффективно иметь несколько куч C в одной программе.

Существуют и другие потенциальные проблемы с функциями библиотеки времени выполнения, которые полагаются на статически хранимую информацию, такую ​​как srand и rand, локали и уродливые унаследованные функции, такие как strtok.

, даже когда есть возможность связатьв разных версиях Visual Studio обычно гораздо безопаснее этого не делать.

2 голосов
/ 21 августа 2010

Каждая версия Visual Studio содержит обновленную (и другую) версию среды выполнения C и / или C ++. Эта страница MSDN (в разделе: «Какие проблемы существуют ...») довольно хорошо объясняет, в чем проблема.То, что там описано для msvcrt.dll <-> msvcrt10.dll, действительно для каждого существующего msvcrtXX.dll.

Это не должно представлять каких-либо примечательных проблем, но использование версии двоичного кода для соответствующей версииРекомендуется VS.

...