VC9 и VC8 lib совместимость

(Оригинальный вопрос был задан там: http://www.ogre3d.org/phpBB2/viewtopic.php?t=44832)

Кто-то спросил: "Хотя я хотел бы собрать все в vs2008 (VC9), PhysX SDK собран с vs2005 (VC8). Не вызовет ли это каких-либо проблем, используя все скомпилированные библиотеки vc9 и используемые в сочетании с этой библиотекой vc8?"

Я ответил, что за день до того, как я попытался использовать файл.lib (и.dll), сгенерированный с помощью VC8, и включить его в скомпилированный исполняемый файл vc9, компилятор не смог открыть файл.lib.

Теперь другие ответили, что сделали это без проблем....

Я не могу найти информацию о совместимости lib между vc9 и vc8.

так что... помогите?

2 ответа

Решение

Формат lib - 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 будет работать.

Надеюсь это поможет. PS Вы пишете: "Компилятору не удалось открыть файл.lib." Линкер - это тот, кто пытается открыть библиотеки для компоновки, а не компилятор.

Это работает, но у вас возникают проблемы при совместном использовании объектов CRT/STL.

Поэтому, когда вы делаете 'new' в библиотеке vc8 и возвращаете ее функции vc9, которая, в свою очередь, удаляет этот объект, вы получаете утверждение от delete.

 T* funcInVc8Lib()
 {
     return new T();
 }

 void funcInVC9Program()
 {
     T* p = funcInVc8Lib();
     // ...
     delete p; // it should at least assert here (in _CrtIsValidHeapPtr() )
 }
Другие вопросы по тегам