3

(最初的问题是在那里提出的:http ://www.ogre3d.org/phpBB2/viewtopic.php?t=44832 )

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

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

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

我找不到有关 vc9 和 vc8 之间的 lib 兼容性的信息。

所以……救命?

4

2 回答 2

3

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

因此,当您在 vc8 库中执行“新建”并将其返回给 vc9 函数时,该函数又会删除该对象,您会从删除中获得一个断言。

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

 void funcInVC9Program()
 {
     T* p = funcInVc8Lib();
     // ...
     delete p; // it should at least assert here (in _CrtIsValidHeapPtr() )
 }
于 2008-10-05T13:36:49.660 回答
3

lib 格式为 COFF(http://msdn.microsoft.com/en-us/library/7ykb2k5f (VS.71).aspx ),PE 格式也使用 COFF。因此,我希望大多数(如果不是全部)用 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文件。”。链接器是试图打开要链接的库的链接器,而不是编译器。

于 2008-10-05T13:43:09.210 回答