繁体   English   中英

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

[英]Does having binaries with mismatched optimization levels (-O3, -O2, -O1, -O0) cause stability issues?

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

通常不会,优化级别不匹配不会导致稳定性问题。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM