Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to build-in gprof support to a program built with SCons?

Tags:

c

scons

gprof

Greetings,

Here is my SConstruct file:

env = Environment()
env.Append(CCFLAGS=['-g','-pg'])
env.Program(target='program1', source= ['program1.c'])

Also here is the output of the compilation:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 program1.o
scons: done building targets.

As you can see I pass the "-pg" option to the build environment. After I build, I run the program to generate "gmon.out" but it isn't produced.

Can anyone confirm this problem? or have a solution?

Thanks.

Update:

Thanks to the advice given here, the updated working SConstruct file is as follows. The linker requires the flag, so to pass it through scons, the "LINKFLAGS" option must be used.

env = Environment()
env.Append(CCFLAGS=['-g','-pg'], LINKFLAGS=['-pg'])
env.Program(target='program1', source= ['program1.c'])

Output of compilation:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 -pg program1.o
scons: done building targets.

Note the additional "-pg" in the linking phase.

like image 474
kobrien Avatar asked Aug 14 '10 17:08

kobrien


1 Answers

The linker also needs the -pg option in this case. From GCC man mage:

-pg Generate extra code to write profile information suitable for the analysis program gprof. You must use this option when compiling the source files you want data about, and you must also use it when linking.

Try adding the option to LDFLAGS environment variable too.

like image 58
Nikolai Fetissov Avatar answered Oct 08 '22 00:10

Nikolai Fetissov