Проблема с gprof на OS X: [программа] не имеет архитектуры хоста

Заключение в кавычки C++ FAQ ,

[7.8], Каково различие между структурой ключевых слов и классом?

участники и базовые классы структуры общедоступны по умолчанию, в то время как в классе, они принимают значение по умолчанию к частному.Примечание: необходимо сделать базовые классы явно общедоступными, частными, или защищенными, вместо того, чтобы полагаться на значения по умолчанию.

Структура и класс иначе функционально эквивалентны.

хорошо, достаточно того писклявого чистого разговора о техно. Эмоционально, большинство разработчиков делает сильное различие между классом и структурой. Структура просто чувствует себя подобно открытой груде битов с очень мало в способе инкапсуляции или функциональности. Класс чувствует себя подобно проживанию и ответственному члену общества с интеллектуальными сервисами, сильным барьером инкапсуляции и четко определенным интерфейсом. Так как это - коннотация, которую уже имеет большинство людей, необходимо, вероятно, использовать ключевое слово структуры, если у Вас есть класс, который имеет очень немного методов и имеет общедоступные данные (такие вещи действительно существуют в хорошо разработанных системах!), но иначе необходимо, вероятно, использовать ключевое слово класса.

9
задан Jesse Beder 9 July 2009 в 02:51
поделиться

3 ответа

Предполагается, что последовательность событий здесь будет работать следующим образом:

  1. Компиляция кода с -pg опцией
  2. Код ссылки с -pg option
  3. Run program
  4. Программа генерирует файл gmon.out
  5. Run gprof

Проблема в том, что шаг 4 никогда не выполняется. Информации об этой конкретной ошибке очень мало. Похоже, что за последние несколько лет все пришли к общему мнению, что Apple предпочла бы вместо этого использовать Shark, и они очень не торопились исправлять ошибки и тому подобное с помощью gprof .

Вкратце: установите Xcode, человек-акула

9
ответ дан 4 December 2019 в 13:04
поделиться

Похоже, test построен с использованием архитектуры, которую gprof не ожидает. Попробуйте следующее:

$ cat > test2.c
#include <stdio.h>
int main() { printf("test\n"); return 0; }
^D
$ gcc -arch i386 -pg -o test2 test2.c
$ file test2
test2: Mach-O executable i386
$ ./test2
test
$ gprof test2
... bunch of output ...
$ gcc -arch ppc -pg -o test2 test2.c
$ file test2
test: Mach-O executable ppc
$ ./test2
test
$ gprof test2
gprof: file: test2 is not of the host architecture
$ arch -ppc gprof test2
... same bunch of output ...

Более новая MacOS поддерживает запуск исполняемых файлов с архитектурой IBM PPC и Intel x86. Некоторые из цепочек инструментов кажутся немного сложными по этому поводу. Gprof, похоже, ожидает, что исполняемый файл будет в собственной архитектуре. Однако, если вы используете утилиту arch для принудительного выполнения неродной архитектуры, то, похоже, она работает правильно. Некоторое время назад обсуждали это в другом контексте . Я добавил туда несколько полезных ссылок и дополнительную информацию.

3
ответ дан 4 December 2019 в 13:04
поделиться

К сожалению, gprof не работает в Mac OS X. Возможно, вы захотите использовать вместо него Shark . Он является частью инструментов разработчика в / Developer / Applications / Performance Tools / Shark .

Обновление: Похоже, что gprof теперь работает в Mac OS X 10.6 (Snow Leopard) с использованием последних инструментов разработчика.

4
ответ дан 4 December 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: