c/c++目标文件中符号生成规则 ,
常看到形如T _Z4funcidcPc等符号而不知这个是什么意思,其实这个是根据对应函数生成的符号名称,其生成规则为:
以_Z开始,如果在命名空间(类中)中的后面加个N,然后是函数名称长度,后面是函数名,后面跟参数类型,如i=int d=double..... 指针 = P
所以下面这个例如可以描述
/*symbol.cpp */
void func(int a, double b, char c, char* p){
return;
}
int main(int argc, char** argv){
return 0;
}
g++ -S symbol.cpp 生成汇编symbol.s
g++ -c symbol.s 生成目标symbol.o
执行命令 nm symbol.o | grep func
输出:
0000000000000066 t _GLOBAL__I__Z4funcidcPc
0000000000000000 T _Z4funcidcPc
将func改为
void func(int a, double b, char c, char p){
return;
}
则输出:
0000000000000066 t _GLOBAL__I__Z4funcidcc
0000000000000000 T _Z4funcidcc
验证:
用命令c++filt _Z4funcidcc其输出为:
func(int, double, char, char)