使用 GNU make 启用分析功能来编译包

标签 c gcc makefile profiling

我正在尝试编译一个启用了代码分析的大包(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/

相关文章:

c++ - 通过 C++ 编译器构建 C 应用程序

makefile - QMake:构建后执行脚本

linux - 如何创建配置脚本?

C:字符串拼写检查指南

c - 如何访问结构的3维指针内的指针数组

c - 在 linux 上用 libusb 编译 c 代码的问题

c++ - 's the difference between application' 是什么输入点地址和可执行起始地址

c - 结构体/结构体值的内存分配

c++ - 简单的 netbeans C++ 项目无法编译

gcc - 传递 ‘const 此参数会丢弃限定符 [-fpermissive]