VC9和VC8 lib兼容

时间:2008-10-05 10:55:32

标签: c++ dll visual-c++-2008 vc8

(原来的问题在那里被问到:http://www.ogre3d.org/phpBB2/viewtopic.php?t=44832

有人问: “虽然我想在vs2008(VC9)中构建所有内容,但PhysX SDK是使用vs2005(VC8)构建的。这是否会导致任何问题,使用所有vc9编译的lib并与此vc8 lib结合使用?”

我回答说,在我尝试使用VC8生成的.lib文件(和.dll)并将其包含在vc9编译的exe中的前一天,编译器无法打开.lib文件。

现在,其他人回答他们这样做没有问题......

我无法找到vc9和vc8之间的lib兼容性信息。

所以......帮忙?

2 个答案:

答案 0 :(得分:3)

它可以工作,但在共享CRT / STL对象时会遇到问题。

因此,当您在vc8库中执行'new'并将其返回到vc9函数时,该函数将删除此对象,您将从delete中获取断言。

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

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

答案 1 :(得分:3)

lib格式为COFF(http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.71).aspx),COFF也以PE格式使用。 因此,我希望大多数(如果不是所有)使用vc8构建的库都可以与vc9链接。

但是我在msdn上找到了一个线程,其中MS似乎不保证用VC8编译的lib会很好地与VC9链接。 http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/8042a534-aa8b-4f99-81ee-e5ff39ae6e69/

考虑到这两个信息,我得出结论:虽然MS不保证完全100%的兼容性,但我希望在大多数情况下将vc8 lib与vc9连接起来。

希望这会有所帮助。 附:你写“编译器无法打开.lib文件。”。链接器是尝试打开要链接的库的链接器,而不是编译器。