Gmon.out не создается при компиляции с флагом -pg с g++

Я работаю на 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 работать на моем компьютере. Как предполагает руководство, я ввожу следующие две строки в свой терминал:

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

Вы должны понять, что OS X/MacOS по умолчанию не предоставляет GNU GCC.

Обратите внимание на вывод этой команды:

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

Эти исполняемые файлы выглядят одинаково. (На самом деле, похоже, что они разные, но как-то размер файла идентичен!)

Насколько я могу судить, clang не поддерживает производство gprof-вывода. Как бы странно это ни было, программа gcc будет запускать clang.

Я бы порекомендовал попробовать использовать homebrew для установки GCC на OS X/MacOS. Вы хотите быть осторожным о том, как он устанавливается и т.д., Чтобы вы знали, какая команда соответствует тому компилятору.