2008-10-05 11 views
3

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

Кто-то спросил: «В то время как я хотел бы построить все в VS2008 (VC9), то PhysX SDK построен с VS2005 (VC8) . Из-за этого возникнут какие-либо проблемы, используя все компилируемые библиотеки vc9 и используемые в сочетании с этой vc8 lib? "

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

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

Я не могу найти информацию о Lib совместимости между VC9 и VC8.

так ... Помогите?

ответ

3

Либерал формат 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 lib с vc9 будет работать.

Надеюсь, что это поможет. P.S. Вы пишете «компилятор не смог открыть .lib-файл». Линкером является тот, который пытается открыть связанные библиотеки, а не компилятор.

+0

Да, я имел в виду компоновщик. :) – Klaim

3

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

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

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

void funcInVC9Program() 
{ 
    T* p = funcInVc8Lib(); 
    // ... 
    delete p; // it should at least assert here (in _CrtIsValidHeapPtr()) 
} 
+0

И кто передаст право собственности на выделенный блок другому модулю? Контейнеры STL лучше подходят для примера, здесь хорошо. –