首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化级别不匹配的二进制文件(-O3、-O2、-O1、-O0)是否会导致稳定性问题?

优化级别不匹配的二进制文件(-O3、-O2、-O1、-O0)是否会导致稳定性问题?
EN

Stack Overflow用户
提问于 2020-09-29 04:41:53
回答 2查看 126关注 0票数 2

优化级别不匹配的二进制文件(-O3、-O2、-O1、-O0)是否会导致稳定性问题?例如,如果app.exe是-O2,libapp.so是-O3,或者app.o是-O2,libxyz.a是-O3?

EN

回答 2

Stack Overflow用户

发布于 2020-09-29 04:50:28

一般来说,不匹配的优化级别不会导致稳定性问题。

从理论上讲,一个写得特别糟糕的库可能会基于基于优化级别定义的实现定义的预处理器宏来更改其二进制接口,在这种情况下可能会出现问题。

这在我的经验中并不常见。更常见的问题是NDEBUG宏(以及类似的宏)。

票数 0
EN

Stack Overflow用户

发布于 2020-09-29 05:07:32

优化级别本身不能影响它,但经常将优化级别与一些影响构建的宏相结合,从而导致ABI问题。例如,在MSVC中,如果一个在发布模式下构建的dll被链接到调试模式应用程序,并且它接受对std::string的引用作为某个函数的输入(而不是说在共享库中应该有一个std::string或对它的引用),那么它可能会导致崩溃。

此外,如果库和应用程序是使用不同的编译器/选项构建的,那么如果库的接口使用任何复杂的类,则可能会出现一些ABI问题。您应该查看编译器文档中的相关信息。

此外,如果代码中存在bug,那么优化级别可能会改变bug的行为,导致优化级别之间出现一些奇怪的不一致。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64109351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档