Первым шагом для порождения профильной информации о вашей программе является ее компилирование и сборка (линковка) с разрешенным профилированием.
При компиляции исходного файла для профилирования, укажите опцию `-pg' компилятору. (Эта опция должна быть добавлена к другим опциям, которые вы обычно используете).
При сборке (линковке) программы для профилирования, если вы пользуетесь компилятором типа `cc', который обеспечивает сборку, просто укажите `-pg' вдобавок к вашим обычным опциям. Эта опция, `-pg', изменит и компиляцию, и сборку так, как необходимо для профилирования. Например:
cc -g -c myprog.c utils.c -pg
cc -o myprog myprog.o utils.o -pg
Опция `-pg' также сработает и с командой, которая выполняет сразу
и компиляцию, и сборку:
cc -o myprog myprog.c utils.c -g -pg
Если вы запускаете сборщик (линкер) `ld' непосредственно, а не
через компилятор типа `cc', то вы должны указать профилирующий начальный
файл `/lib/gcrt0.o' как первый входной файл вместо обычного начального
файла `/lib/crt0.o'. Вдобавок, вам, возможно, захочется указать
профилирующую библиотеку Си `/usr/lib/libc_p.a', задав опцию `-lc_p'
вместо обычной `-lc'. Это не является абсолютно необходимым, однако
позволяет вам получить информацию о количестве вызовов функций
стандартной библиотеки, таких как `read' или `open'. Например:
ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p
Если вы компилируете только некоторые модули программы с `-pg', вы
еще сможете профилировать программу, но вы не получите полной информации
о модулях, которые были откомпилированы без `-pg'. Все, что вы узнаете
о функциях в этих модулях, это общее время, затраченное на их
выполнение; вы не узнаете, сколько раз они были вызваны или откуда. Это
не повлияет на простой профиль (за исключением поля `вызовы', которое
для таких функций останется пустым), но заметно уменьшит полезность
графа вызовов.