nm查看C++生成的.o,.o中的函数有啥命名规则么

C++的函数名是mangle过的,每个、每一些版本的编译器都可能有自己的规则。用GCC规则mangle的名字,可以用c++filt程序给转回来。
■网友
那是C++用来实现重载而加的名称修饰(Name mangling),你可以想一下一堆同名函数只有参数不同,怎么生成目标文件?你用C语言写就没这么多事了,一般只有一个数字表示参数大小,当然也就不能重载同名函数。这个生成规则C++语言标准是不管的,各家编译器自成一体,没有统一的命名修饰规则。
■网友
--demangle nm工具的这个选项
■网友
《程序员的自我修养:链接、装载与库》
GCC的基本C++名称修饰方法如下:所有的符号都以"_Z"开头,对于嵌套的名字(在名称空间或在类里面的),后面紧跟"N",然后是各个名称空间和类的名字,每个名字前是名字字符串长度,再以"E"结尾。比如N::C::func经过名称修饰以后就是_ZN1N1C4funcE。对于一个函数来说,它的参数列表紧跟在"E"后面,对于int类型来说,就是字母"i"。所以整个N::C::func(int)函数签名经过修饰为_ZN1N1C4funcEi。更为具体的修饰方法我们在这里不详细介绍,有兴趣的读者可以参考GCC的名称修饰标准。 【nm查看C++生成的.o,.o中的函数有啥命名规则么】 key:函数签名,符号修饰符

■网友
去看这篇博客,应该能解答你的问题。主要就是因为函数重载编译器需要区分相同函数名的函数,于是给这类函数使用某种命名规则来命名。C++的函数重载


    推荐阅读