(Исходный вопрос был задан там: http://www.ogre3d.org/phpBB2/viewtopic.php?t=44832)
Кто-то спросил: «Хотя я хотел бы собрать все в vs2008 (VC9), PhysX SDK построен с vs2005 (VC8). Вызовет ли это какие-либо проблемы, используя все скомпилированные библиотеки vc9 и используемые в сочетании с этой библиотекой vc8?»
Я ответил, что за день до того, как я попытался использовать файл .lib (и .dll), созданный с помощью VC8, и включить его в скомпилированный exe-файл vc9, компилятор не смог открыть файл .lib.
Теперь другие ответили, что сделали это без проблем ....
Я не могу найти информацию о совместимости библиотек между vc9 и vc8.
так что ... Помогите?





Это работает, но возникают проблемы при совместном использовании объектов CRT / STL.
Поэтому, когда вы делаете «новый» в библиотеке vc8 и возвращаете его функции vc9, которая, в свою очередь, удаляет этот объект, вы получаете подтверждение от удаления.
T* funcInVc8Lib()
{
return new T();
}
void funcInVC9Program()
{
T* p = funcInVc8Lib();
// ...
delete p; // it should at least assert here (in _CrtIsValidHeapPtr() )
}
Формат библиотеки - COFF (http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.71).aspx), также COFF используется в формате PE. Таким образом, я ожидал, что большинство, если не все библиотеки, созданные с помощью vc8, будут связаны с vc9.
Однако я нашел поток на msdn, где MS, похоже, не гарантирует, что библиотеки, скомпилированные с VC8, будут хорошо связываться с VC9. http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/8042a534-aa8b-4f99-81ee-e5ff39ae6e69/)
Принимая во внимание эти 2 бита информации, я бы сделал вывод: хотя MS не гарантирует полную 100% совместимость, я ожидаю, что в большинстве случаев связывание библиотеки vc8 с vc9 будет работать.
Надеюсь это поможет. P.S. Вы пишете «компилятору не удалось открыть файл .lib». Компоновщик - это тот, кто пытается открыть библиотеки для связывания, а не компилятор.
И кто передаст право владения выделенным блоком другому модулю? Контейнеры STL лучше подходят для примера, хороший момент здесь.