当我使用-pg标志和g进行编译时,不会创建c:gmon.out

gmon.out isn't created when I compile with -pg flag with g++

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

main.cpp

1
2
3
4
5
6
7
8
#include <iostream>

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

我正在尝试让gprof在我的计算机上工作。如手册所述,我在终端中输入以下两行:

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

但是,这不会像预期的那样生成gmon.out文件。当我尝试在终端中键入gprof时,它说:

1
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文件。


您必须意识到,默认情况下,OS X / MacOS在系统上不提供GNU GCC。

注意此命令的输出:

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

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

据我所知,clang不支持gprof输出的产生。令人困惑的是,gcc程序将运行clang。

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