使用较新的IDE重新编译来源

问题描述 投票:0回答:1
在新的环境中使用旧编译的代码时,有一般实践吗?

Edit:

我真的不能从MS/VS特定的Vantial点讲话,但是我与其他编译器的经历是以下内容:

enter image description here

ABI(即呼叫惯例或类信息的布局)可能会在编译器甚至编译器版本之间发生变化。因此,如果您编译了应用程序和不同编译器版本的库,则可能会遇到奇怪的崩溃。 (这就是为什么有诸如com或nsobject之类的东西 - 它们为不同模块互相交谈的稳定方式)
c++ mfc
1个回答
2
投票
有些人会根据生成二进制的编译器版本或与之相关的系统库更改其行为。这样,他们就可以修复错误而不会破坏解决方法。如果您使用较新的编译器或与较新的库一起构建,则假定您再次测试,因此他们希望您不再需要您的解决方法并将其删除。 (不过,这通常适用于整个应用程序,因此较新的应用程序中的较旧库通常会采用新的行为,并且其解决方法已损坏。

新编译器可能会更好。它可能具有更好的优化器并生成更快的代码,它可能已修复错误,可能支持新的CPU。
  1. 新的编译器/新库可能具有较新版本的模板和其他存根,胶水和库代码,这些版本已编译到您的应用程序中(例如C ++模板类)。这可能是#3的变体,也可能是上面#1的变体。例如。如果您已将传递给较新应用程序的std :: vector实现了较早的实现,则可能会崩溃,试图使用它已更改的部分。或者它的效率可能较低或功能较小。

    因此,使用新的编译器通常是一个好主意,但这也意味着您应该小心并进行彻底测试以确保您不会错过任何更改。
  2. 您用“ C ++”和“ MFC”标记了此。如果您实际上具有C ++接口,则

    真的应该用与构建客户端相同的编译器编译DLL。 MS不会使C ++ ABI在编译器版本(尤其是标准库)中完全稳定,因此不兼容可能会导致微妙的错误。 此外,较新的编译器通常更好地优化。

  3. 如果旧的DLL似乎更稳定,就我的经验而言,这仅仅是因为VC6用VC6更好地掩盖了错误。 (使用新版本使用广泛的运行时检查?!)
  4. 主要好处是,您可以在与主应用程序进行交互时无缝调试DLL。您不想错过其他改进,例如CTIME能够在2037年持有日期。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.