为什么GCC编译的应用程序总是包含_mcount符号?

Jos*_*vin 7 gcc profiling symbols shared-libraries

库并不总是包含_mcount符号,但是应用程序会这样做(您可以使用gobjdump或nm实用程序来验证它).我已经读过_mcount用于实现分析,但即使禁用分析并启用优化(-O2),该符号也会出现.它是否还有其他用途?

更新:我在Solaris上,所以这是Solaris链接器与GCC结合使用,我不确定这是否有所作为.GCC版本是4.2.2.即使我编译的文件只包含int main() { return 0; }没有链接库的代码,也会发生这种情况.

Update2:我输入:

$ g++ -O2 mytest.cpp
$ nm a.out | grep _mcount
[65]    | 134547444|       1|FUNC |GLOB |0    |11     |_mcount
Run Code Online (Sandbox Code Playgroud)

并且g ++没有别的任何东西.另外,我尝试使用sun CC编译器进行编译,但它没有这个问题.我也尝试过更新GCC,符号仍然存在于4.4.1中.

Nil*_*nck 5

嗯 奇怪,在我的机器上(ubuntu 9.10)不会发生这种情况。

为了进行测试,我只编译了一个小的问候词:

#include <stdio.h>

int main (int argc, char **args)
{
  printf ("hello world\n");
}
Run Code Online (Sandbox Code Playgroud)

用编译

gcc test.c
Run Code Online (Sandbox Code Playgroud)

它没有_mcount符号。我检查了:

nm a.out | grep -i count
Run Code Online (Sandbox Code Playgroud)

尝试使用一些编译器开关(-g,-pg等),结果表明该符号仅在使用-pg编译应用程序时出现。在这种情况下,您启用了性能分析进行编译,因此_mcount符号具有存在的理由。