【问题标题】:gmon.out isn't created when I compile with -pg flag with g++当我使用 g++ 使用 -pg 标志编译时,未创建 gmon.out
【发布时间】:2013-11-18 13:19:16
【问题描述】:

我在 Mac OSX 版本 10.8.5 (Mountain Lion) 上运行。我有以下简单的 C++ 代码。

main.cpp

#include <iostream>

int main ()
{
    std::cout << "Hello world!"<<std::endl;
    std::cout << "Goodbye world!"<<std::endl;
    return 0;
}

我正在尝试让 gprof 在我的计算机上工作。正如manual 建议的那样,我在终端中输入以下两行:

g++ -g -pg main.cpp -o a.out 
./a.out

然而,这并没有像它预期的那样生成gmon.out 文件。当我尝试在终端中输入gprof 时,它显示:

gprof: can't open: gmon.out (No such file or directory)

这是意料之中的,因为gmon.out 不存在...

关于我做错了什么有什么想法吗?

编辑:其他一些可能有帮助的事情:

  • 我的朋友有类似的 OS X 版本(我可以稍后请他确认),以及完全相同版本的 g++gprof,能够 如我所述,成功使用gprof

  • 我使用的是旧版本的g++,但我在网上看到更新到新版本没有帮助。

  • a.out 完美运行,它打印出Hello world!Goodbye world!。我还尝试了一个更复杂的 C++ 程序 几个班,它仍然有同样的问题。一切 编译运行正常,但没有生成gmon.out文件。

【问题讨论】:

  • stackoverflow.com/questions/1101545/… 的可能副本,尽管其中一个答案声称gprof 现在可以在 OS X 10.6 上运行。我看不出你做错了什么,你所做的正是你在我的 Linux 系统上所期望的那样工作。
  • 是的,我有 10.8.5,我也看到了这个问题,但我想我会开始一个新线程,因为我有一个更新版本的 OS X 并且那个线程似乎没有任何地方.还有一个我没有遇到的“测试不是主机架构”问题。
  • 不管人们怎么说,-pg 在我的任何系统 10.7-10.9.4 上都不起作用。我相信您可以安装自己的 gcc 版本(与 Apple 提供的版本不同),并且可以在那里进行分析。
  • 即使 gprof 在这里工作,你也不会在你的代码中得到任何样本,因为在 I/O 之外 gprof 看不到无论如何,您编译的代码大约需要一纳秒。它可以在 gprof 样本之间运行数千次。
  • -pg 和 gprof 在 OSX 10.10.3 中绝对不适合我。甚至尝试运行cc 而不是clang 并明确调用exit

标签: c++ macos g++ gprof


【解决方案1】:

你必须意识到 OS X/MacOS 默认没有在系统上提供 GNU GCC。

注意这个命令的输出:

ls -la /usr/bin/g++ /usr/bin/clang++

这些可执行文件看起来相同。 (实际上!看起来它们是不同的,但文件大小是相同的!)

据我所知,clang 不支持生成 gprof 输出。尽管可能令人困惑,gcc 程序将运行 clang。

我建议尝试使用自制软件在 OS X/MacOS 上安装 GCC。您确实需要注意它的安装方式等,以便您知道哪个命令对应于哪个编译器。

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 2011-04-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多