我正在尝试编译一个启用了代码分析的大包(Heasoft)。该软件包使用 makefile 进行安装。 我正在启用编译,并支持通过 CFLAGS 使用 (gcc)“-pg”标志进行分析:
$ CFLAGS="-pg" make
编译一直运行,直到出现不兼容标志之间的以下错误:
gcc:错误:-pg 和 -fomit-frame-pointer 不兼容
我该如何应对? (鉴于我只对分析该软件包提供的一些工具感兴趣,我在下面提出了更客观的问题,希望能够更轻松地回答这些问题)
- 这个“省略帧指针”是什么?它真的需要吗?
- 我可以告诉 GNU make 避免此类冲突,忽略命令行(在本例中为“-pg”)标志吗?
- 我可以告诉 GNU make 哪些代码(工具)我想要启用分析(“-pg”)标志吗?
谢谢。
最佳答案
“省略帧指针”正是这样做的 - 它指示编译器不保存 frame pointer如果编译器检测到该函数不需要它(例如,因为它没有参数,因此不会影响堆栈),则将其放入 CPU 寄存器中。这可以节省每次通话的时间。它还释放了一个寄存器,然后可用于进一步优化。
另一方面,跟踪函数变得不可能,因此要启用调试或分析,您需要显式恢复它。
为此,请将 -fno-omit-frame-pointer
添加到调试标志。
您可能还必须使用 -O0
标志禁用所有代码优化。
关于使用 GNU make 启用分析功能来编译包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26854964/