将用VC ++ 10编译的代码链接到用VC ++ 9编译的代码

时间:2012-01-18 17:55:06

标签: c++ visual-c++

我们的项目使用VC ++ 9和VS2008,我们希望使用VS2010切换到VC ++ 10以使用新功能。不幸的是,我们的一些依赖项是使用VC ++ 9构建的,并且由于各种原因目前无法使用VC ++ 10重新编译它们。既然我们真的想要进行切换,有没有办法简单地链接这些库,或VC ++ 10和VC ++ 9二进制文件之间没有兼容性?

编辑:实际的依赖关系是BWAPIBWTA。在BWAPI的情况下,这不是问题,但BWTA依赖于CGAL,这就是给我们带来麻烦的东西。试图与它链接会产生一堆链接错误。

3 个答案:

答案 0 :(得分:1)

一般情况下,除非依赖项是COM模块或仅导出“纯”C函数的dll,否则运气不佳。

答案 1 :(得分:1)

允许Visual Studio版本破坏ABI兼容性。这意味着C ++类的导出和内部签名是不同的,并且例如从用一个版本编译的二进制文件中的std::string传递到用不同版本编译的二进制文件可能不具有预期的结果。简而言之:不要依赖这种工作。如果是这样,你很幸运,但在运行时级别的“未定义行为”领域。只需修复您的代码即可使用VS2010进行构建。它可能已经开始了。

答案 2 :(得分:0)

对于你无法改变的第三方lib的情况,典型的答案是用一个用VC2008构建的简单dll包装它们并为你调用第三方。然后,您可以控制所暴露的内容,因此您可以回退到适用于两个链接器的“标准化”机制。这几乎总是C函数调用,因为C非常标准化。

问题是MS改变了编译C ++的ABI,我想标准委员会没有提供调用C ++二进制文件的标准方法。

查看GCAL对您来说这似乎不是一个好的答案,在这种情况下您可以做的最好的事情是联系GCAL并等待重建的二进制文件。


但我刚刚检查了它的开源,自己重建它。不仅如此,它已经支持VS2010,因此重建应该很容易。