【问题标题】:VC9 and VC8 lib compatibilityVC9 和 VC8 库兼容性
【发布时间】:2010-09-15 08:51:09
【问题描述】:

(原来的问题是在那里问的: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 兼容性的信息。

所以...帮助?

【问题讨论】:

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


    【解决方案1】:

    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 链接起来可以工作。

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

    【讨论】:

      【解决方案2】:

      它可以工作,但是在共享 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() )
       }
      

      【讨论】:

      • 谁会将分配块的所有权传递给另一个模块?例如,STL 容器更好,这点很好。
      猜你喜欢
      • 1970-01-01
      • 2011-06-09
      • 2011-03-22
      • 2014-10-11
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多