我们最近试图将一些Visual Studio项目拆分成库,一切似乎都在一个测试项目中编译和构建,其中一个库项目作为依赖项.但是,尝试运行该应用程序给了我们以下令人讨厌的运行时错误消息:
运行时检查失败#0 - ESP的值未在函数调用中正确保存.这通常是调用使用不同调用约定声明的函数指针的结果.
我们甚至从未为函数指定调用约定(__cdecl等),使所有编译器开关都处于默认状态.我检查过,项目设置与整个库和测试项目的调用约定是一致的.
更新:我们的一个开发人员将"基本运行时检查"项目设置从"两者(/ RTC1,等同于/ RTCsu)"更改为"默认",运行时间消失,使程序运行正常.我完全不相信这一点.这是一个合适的解决方案,还是一个危险的黑客?
我听说启用链接时代码生成(/ LTCG交换机)可以成为大型项目的主要优化,其中有许多库链接在一起.我的团队正在我们的解决方案的Release配置中使用它,但是长编译时间是一个真正的拖累.对其他文件所依赖的一个文件进行一次更改会触发另一个45秒的"生成代码...".发布肯定比Debug快得多,但是我们可以通过禁用LTCG并且只保留/ O2来实现相同的加速.
启用/ LTCG是否值得?