Смешивание статических библиотек кода C, созданных из разных версий Visual Studio 2002 и более поздних версий
-
19-08-2019 - |
Вопрос
У меня есть статическая библиотека ссылок на подпрограммы C и Fortran, скомпилированные и соединенные вместе с помощью компилятора Visual Studio 2002 C (v7.0) и компилятора Intel Fortran 9.0.018.
Код C в моей библиотеке вызывает и ссылается на статические библиотеки Microsoft C-RunTime (MSCRT) 2002 (однопоточные). Я считаю, что фактический номер версии библиотеки CRT 2002 года - v7.0
Я буду называть эту статическую библиотеку " vs2002if9.lib "
Могу ли я статически ссылаться на мой " vs2002if9.lib " безопасно использовать любую более позднюю версию Visual Studio (2003, 2005 или 2008), не беспокоясь о том, как вызывающая программа ведет себя в отношении вызовов времени выполнения C?
Или я создаю проблемы, смешивая версии статических библиотек CRT?
Что если я предоставлю свой " vs2002if9.lib " сторонним разработчикам программного обеспечения? Какие требования я к ним предъявляю?
Решение
Смешивание среды выполнения C не работало для меня в прошлом. Единственный способ, с помощью которого я могу увидеть эту работу {возможно}, - это если вы полностью изолируете использование стека / кучи в границах статически связанного C-Runtime [ничто не пересекает границы через параметры, но тогда какое значение будет вашим vs2009if9 .lib обеспечение].
Например, если вы хотите выделить указатель [кучу памяти] в приложении и передать этот указатель в предоставленную вами библиотеку, какой менеджер кучи следует использовать? Правильный ответ - менеджер кучи, управляющий указателем, но ваша библиотека не будет знать о другом диспетчере кучи. Это становится ужаснее, если ваша библиотека выделяет память для использования приложением, и приложения обязаны освобождать / удалять, используя предоставленный указатель (плохой дизайн - да, но все еще возможно). Опять же, будет использован неправильный менеджер кучи.