title: Code compiled with profiling flag does not generate gmon.out
body: <p>I compiled a code with gcc using the profiling flag (<code>-pg</code>), but when I run the program no gmon.out is generated.<br>
   I compiled a <em>test</em> code -- actually, the one from <a href="https://stackoverflow.com/questions/19826735/gmon-out-isnt-created-when-i-compile-with-pg-flag-with-g">this</a> question -- to see if the compilation flag &amp; gprof were working and, yes, it worked.</p>
  
  <p>To compile the code (named <code>xrttimetag</code>) the following line was used (here below I used <code>-I(...)</code> and <code>-L(...)</code> to hide a huge list of paths to other scientific libraries):</p>
  
  <pre><code>gcc -c  -o ./xrttimetag.o  -Wall --pedantic -Wno-comment -Wno-long-long -pg -fPIC -I(...) -DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION="" -DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DPACKAGE_URL="" -Dg77Fortran=1 -DgFortran=1 -DHAVE_CONNECT=1 -DHAVE_ACCEPT=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIBM=1 -DHAVE_LIBDL=1 -DHAVE_LIBNCURSES=1 -DSIZEOF_LONG=8 xrttimetag.c
  
  gcc -o xrttimetag xrttimetag.o      -L(...) -lswxrt -latFunctions3.3 -lcoordfits -lcoord -lephemeris -lhdinit_2.7 -lhdutils_2.7 -lape_2.8 -lcfitsio_3.37 -lreadline -lhdio_2.7 -lncurses -ldl -lm  -L/usr/lib64/gcc/x86_64-suse-linux/4.6 -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../.. -L/usr/lib64/gcc/x86_64-suse-linux/4.6 -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../.. -lgfortran -lm -lgcc_s -lgcc -lquadmath -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc 
  </code></pre>
  
  <p>I looked for symbols related to <code>gmon</code> on the generated binary and they look a bit strange for me since they are <em>undefined</em> :</p>
  
  <pre><code>readelf -s `which xrttimetag` | egrep "gmon|mcount"
   21: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
   74: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@GLIBC_2.2.5 (2)
   41: 000000000040267c     0 FUNC    LOCAL  DEFAULT   15 call_gmon_start
   96: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
  166: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@@GLIBC_2.2.5
  </code></pre>
  
  <p>On the other hand, the <a href="https://stackoverflow.com/questions/19826735/gmon-out-isnt-created-when-i-compile-with-pg-flag-with-g"><em>test</em></a> code, I compiled with:</p>
  
  <blockquote>
    <p>g++ -pg test.cpp</p>
  </blockquote>
  
  <p>And the search for "gmon|mcount" symbols give me:</p>
  
  <pre><code>readelf -s test | egrep "gmon|mcount"
   6: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@GLIBC_2.2.5 (3)
  11: 0000000000400850    63 FUNC    GLOBAL DEFAULT   15 __gmon_start__
  40: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS gmon-start.c
  43: 0000000000400890     0 FUNC    LOCAL  DEFAULT   15 call_gmon_start
  73: 0000000000400850    63 FUNC    GLOBAL DEFAULT   15 __gmon_start__
  91: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@@GLIBC_2.2.5
  </code></pre>
  
  <p>We can that the "gmon" symbols are well defined for the _ test_ code and not for the _ xrttimetag_, but I don't really understand why. What am I missing?</p>
  
  <p>Thanks.</p>
  
  <p>PS: I saw the question <a href="https://stackoverflow.com/questions/18939913/gmon-out-is-not-written-after-compiling-with-gcc-pg-g">gmon.out is not written after compiling with gcc -pg -g</a> , and this one is not a duplication, unless I had completely misunderstood that one.</p>