我正在尝试编译一个启用代码分析的大包(Heasoft)。该包使用makefile进行安装。我通过CFLAGS:支持使用(gcc)"-pg"标志进行编译并支持分析
$ CFLAGS="-pg" make
编译一直运行到引发以下不兼容标志之间的错误:
gcc: error: -pg and -fomit-frame-pointer are incompatible
我该怎么处理?(鉴于我只对该软件包提供的一些工具感兴趣,我提出了以下更客观的问题,希望它们能更容易地得到回答)
- 这个"省略帧指针"是什么?它真的需要吗
- 我可以对GNU说,为了避免这种冲突,忽略命令行(在本例中为"-pg")标志吗
- 我可以告诉GNUmake我想要启用评测("-pg")标志的代码(工具)吗
谢谢。
"省略帧指针"正是这样做的——如果编译器检测到函数不需要帧指针(例如,因为它没有参数,因此不会影响堆栈),它会指示编译器不要将帧指针保存到CPU寄存器中。这样可以在每次通话中节省一点时间。它还释放了一个寄存器,然后可以用于进一步的优化。
另一方面,跟踪函数变得不可能,因此要启用调试或分析,需要显式地恢复它。
为此,请将-fno-omit-frame-pointer
添加到调试标志中。
您可能还必须使用-O0
标志禁用所有代码优化。