我的 c++filt 似乎无法正常工作,没有输出更改
Posted
技术标签:
【中文标题】我的 c++filt 似乎无法正常工作,没有输出更改【英文标题】:My c++filt doesn't seem to work properly, no output changes 【发布时间】:2017-02-20 10:07:45 【问题描述】:在我的 linux 上,我有一个 .cpp 文件
void f()
struct Cvoid f();
我编译了它并将二进制文件串起来,尝试对函数名进行解构:
$c++filt __Z1gv
__Z1gv
$c++filt __ZN1C1fEv
__ZN1C1fEv
嗯,它似乎没有像我预期的那样工作。我这里有什么问题吗?我是否必须添加一些字母或删除一些字母才能使其工作?
请注意,这些名称是 clang 符号,似乎 c++filt 仅适用于我的 gcc 版本?或者 c++filt 应该有更新的版本来支持这两种编译器?
【问题讨论】:
你如何得到这些错位的名字? 使用nm
而不是strings
。 nm -C
打印已解构的符号。
【参考方案1】:
您可能需要传递-_
标志。
$ c++filt -_ __Z1gv
g()
$ c++filt -_ __ZN1C1fEv
C::f()
-_--strip-underscore
在某些系统上,C 和 C++ 编译器都会在每个名称前加上下划线。例如,C 名称“
foo
”获取低级名称“_foo
”。此选项删除初始下划线。c++filt
是否默认去除下划线取决于目标。
【讨论】:
以上是关于我的 c++filt 似乎无法正常工作,没有输出更改的主要内容,如果未能解决你的问题,请参考以下文章
我似乎根本无法让 mod_proxy_html 工作 - 没有调试输出,没有错误
setRepresentedFilename使电子应用程序无法正常工作