(原来的问题在那里被问到: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兼容性信息。
所以......帮忙?
答案 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文件。”。链接器是尝试打开要链接的库的链接器,而不是编译器。