如何知道用于在C中构建共享库的优化选项

我有一个非常简单的问题,但我还没有找到答案,所以我去了:
我正在使用共享库,我想知道它是否已使用优化标志(如-O3)编译.

有没有办法找到这些信息?

非常感谢你

解决方法:

除非首先编译库的人使用编译器以某种方式将这些标志保存到二进制文件中(我认为只有最近的GCC才允许这种情况,并且可能是clang),所以根本无法确切地知道已经使用了哪些标志.当然,如果你有很多关于装配的经验,可以扣除很多(例如“这看起来像是一个自动展开的循环”,“这看起来像是为A xor A比A x更快的处理器优化的人” A:= 0x0“等).

通常,总是有不同的源代码可以最终作为相同的编译代码,所以没有办法告诉已经编译的内容是“手动”优化的,或者在许多情况下已经看到了编译器优化.

此外,还有很多C编译器,其中有很多版本,还有更多标志……

现在,你的问题来自某个地方;我猜你也是因为这个问题

>你想知道那里是否有调试符号,或者
>你想确保某些东西因为不正确的优化而崩溃,或者
>你想知道是否有可能进行优化.

现在,1.确实非常独立于优化水平;当然,优化越多,字节码对应的“源代码行”越少,但您仍然可以使用调试符号.

第二点:我学到了很难的方法,除非我成功地排除了所有其他选择,否则我应该责怪错误(而不是我的编译器).

第三点:总是有优化的空间,但除非你自己能够重新编译库,否则这对你没有帮助.如果你重新编译,你将设置标志,所以不需要知道它们是否在第一时间设置.如果你无法重新编译:知道有空间对你没有帮助.如果您只是从复杂的构建过程中获取库:大多数构建系统会为您留下一个日志,其中包含编译器标志等内容.

上一篇:java.lang.Exception:没有找到匹配使用Intellij IDEA的方法的测试


下一篇:c – 如何使用-fPIC重新编译