使用g ++编译-pg标志时,不会创建gmon.out

时间:2013-11-07 02:12:06

标签: c++ macos g++ gprof

我在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文件。

1 个答案:

答案 0 :(得分:0)

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

请注意此命令的输出:

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

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

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

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