如何在gcc(g ++)中编译C ++代码来查看重载函数上的名称?

我有重载的function,如:

void f(int) void f(int, int) void f(int, float) 

如何编译它,让我可以看到mangled的输出? 就像是:

 void f(int) should show: ?f@@YAXH@Z(int) 

例如,要看到预处理器的输出,我们使用-E ,汇编器输出,这是什么名称mangled输出?

PS:平台是Linux

编辑:

通过这里的答案我们去:

 void func(int); void func(int, int); void func(void); void func(char); [root@localhost ~]# cat a.map | grep func 0x0804881a _Z4funcc 0x08048790 _Z4funcv 0x080487be _Z4funcii 0x080487ec _Z4funci 

对于GCC尝试使用:

 -Xlinker -Map=output.map 

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

这将生成一个映射文件,其中将包含所有已损坏的符号名称。

而对于MSVC:

http://msdn.microsoft.com/en-us/library/k7xkk3e2(v=vs.80).aspx

这会产生如下的东西:

 0002:00094190 ??0SerializationException@EM@@QAE@ABV01@@Z 10148190 fiy:foo.obj 

在Linux中,我可以通过nm看到所有符号的名字。 例如:

 $ nm a.out | grep pthread w pthread_cancel@@GLIBC_2.2.5 U pthread_key_create@@GLIBC_2.2.5 U pthread_key_delete@@GLIBC_2.2.5 

-S选项告诉GCC只编译但不能组装一个函数。 即,它将输出人类可读的汇编文本,在其中您将能够看到函数名称。 通过c++filt运行它,这样你就可以把这些重名的名字和未被占用的名字关联起来。

编译器/链接器应该有一些选项来创建映射文件。 在该文件中,您可以看到所有函数和方法的重名。