一、命令简介
C++filt 命令用来解析C++、JAVA符号。比如由于重载,编译器生成的不同符号。
二、使用方法
c++filt [-option] 符号名 ## 如果未指定符号名,默认从标准输入中读取。
三、命令选项
-_, --strip-underscore
在某些系统中,C和C++编译器都在每个名字前面加下划线。例如,C 名称 foo 获得低级名称为 _foo。此选项用于删除初始下划线,c++filt 是否默认删除下划线是依赖于目标的
-n, --no-strip-underscore
不删除初始下划线
-p, --no-params
当解析函数名时,不显示函数参数的类型
-t, --types
试图解析类型与函数名
-i, --no-verbose
输出结果中不包括任何实现细节
-s, --format=FORMAT
c++filt 可以解析不同编译器修饰的符号,此选项用于指明符号修饰所采用的方法:
"auto":根据可执行文件自动选择符号解析方法,此为默认选项
"gnu": GNU C++ compiler (g++)的符号修饰方法
"lucid": Lucid compiler (lcc)的符号修饰方法
"arm":C++ Annotated Reference Manual 指明的方法
"hp":HP compiler (aCC)的符号修饰方法
"edg":EDG compiler 的符号修饰方法
"gnu-v3":GNU C++ compiler (g++) with the V3 ABI 的符号修饰方法
"java":GNU Java compiler (gcj)的符号修饰方法
"gnat":GNU Ada compiler (GNAT) 的符号修饰方法
--help
显示帮助信息
--version
显示版本信息
@FILE
从文件 FILE 中读取命令行选项,读取的选项将插入到 @FILE 选项的位置。如果文件不存在,或者无法读取,那么选项 @FILE 将被按照字面意义处理,而不是被忽略
四、常用示例
## 1、编译时,动态库有中定义符号信息,查看符号原型
ldd -r ./gift_logic.so
...
undefined symbol: _ZN5tbase4tlog5CTLog5log_iEiiPKcz (./gift_logic.so)
c++filt _ZN5tbase4tlog5CTLog5log_iEiiPKcz
tbase::tlog::CTLog::log_i(int, int, char const*, ...)