Kon*_*lph 6 c++ gcc abi name-mangling
我正在尝试使用GCCabi::__cxa_demangle来解码从生成的目标文件导出的符号g++.但是,我不变得到错误
mangled_name不是C++ ABI修改规则下的有效名称
这是我调用函数的方式:
std::string demangled(std::string const& sym) {
std::unique_ptr<char, void(*)(void*)>
name{abi::__cxa_demangle(sym.c_str(), nullptr, nullptr, nullptr), std::free};
return {name.get()};
}
Run Code Online (Sandbox Code Playgroud)
(省略错误处理;它出现在完整的在线演示中.)
我测试过的符号来自这个小代码:
namespace foo {
template <typename T>
struct bar { bar() { } };
}
void baz(int x) { }
template struct foo::bar<int>;
Run Code Online (Sandbox Code Playgroud)
通过g++ -c test.cpp; nm test.o | cut -d ' ' -f3:
EH_frame1
__Z3bazi
__ZN3foo3barIiEC1Ev
__ZN3foo3barIiEC2Ev
Run Code Online (Sandbox Code Playgroud)
我不确定GCC demangling API的目的是什么,如果它不能解码这些符号 - 它可以成功地解码C++ typeid表示.例如,在测试代码中写入typeid(foo::bar<int>*).name()将产生PN3foo3barIiEE,这反过来被上述函数正确地解码.
难道我做错了什么?如何从GCC对象文件中对导出的符号进行解码?
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |