优化级别不匹配的二进制文件(-O3、-O2、-O1、-O0)是否会导致稳定性问题?例如,如果app.exe是-O2,libapp.so是-O3,或者app.o是-O2,libxyz.a是-O3?
发布于 2020-09-29 04:50:28
一般来说,不匹配的优化级别不会导致稳定性问题。
从理论上讲,一个写得特别糟糕的库可能会基于基于优化级别定义的实现定义的预处理器宏来更改其二进制接口,在这种情况下可能会出现问题。
这在我的经验中并不常见。更常见的问题是NDEBUG宏(以及类似的宏)。
发布于 2020-09-29 05:07:32
优化级别本身不能影响它,但经常将优化级别与一些影响构建的宏相结合,从而导致ABI问题。例如,在MSVC中,如果一个在发布模式下构建的dll被链接到调试模式应用程序,并且它接受对std::string的引用作为某个函数的输入(而不是说在共享库中应该有一个std::string或对它的引用),那么它可能会导致崩溃。
此外,如果库和应用程序是使用不同的编译器/选项构建的,那么如果库的接口使用任何复杂的类,则可能会出现一些ABI问题。您应该查看编译器文档中的相关信息。
此外,如果代码中存在bug,那么优化级别可能会改变bug的行为,导致优化级别之间出现一些奇怪的不一致。
https://stackoverflow.com/questions/64109351
复制相似问题