Смешивание статических библиотек кода C, созданных из разных версий Visual Studio 2002 и более поздних версий - PullRequest
1 голос
/ 20 января 2009

У меня есть статическая связываемая библиотека подпрограмм 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 сторонним разработчикам программного обеспечения? Какие требования я к ним предъявляю?

1 Ответ

2 голосов
/ 20 января 2009

Смешение сред выполнения C не работало для меня в прошлом. Единственный способ, с помощью которого я могу увидеть эту работу {возможно}, - это если вы полностью изолируете использование стека / кучи в границах статически связанного C-Runtime [ничто не пересекает границы через параметры, но тогда какое значение будет вашим vs2009if9 .lib обеспечение].

Например, если вы хотите выделить указатель [кучу памяти] в приложении и передать этот указатель в предоставленную вами библиотеку, какой менеджер кучи следует использовать? Правильный ответ - менеджер кучи, управляющий указателем, но ваша библиотека не будет знать о другом диспетчере кучи. Это становится ужаснее, если ваша библиотека выделяет память для использования приложением, и приложения обязаны освобождать / удалять, используя предоставленный указатель (плохой дизайн - да, но все еще возможно). Опять же, будет использован неправильный менеджер кучи.

...