g++模板名称修改
我需要在 g++ 内联汇编中使用模板类成员的地址(作为编译时常量值)。可以表达这个吗? (我认为我需要 T::x
的损坏名称)。
template < typename U >
struct T {
static int x;
};
template < typename U >
void f () {
asm ("somecommand T<U>::x");
}
I need to use the address of a member of a template class in g++ inline assembly (as a compile-time constant value). Is it possible to express this? (I think that I need the mangled name of T<U>::x
).
template < typename U >
struct T {
static int x;
};
template < typename U >
void f () {
asm ("somecommand T<U>::x");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
假设您使用的是 Linux,则可以使用 nm。
nm --demangle foo.o 为您提供符号的分解名称
nm --no-demangle foo.o 为您提供符号的损坏名称。
然后,您可以比较这两个文件的输出,以将损坏的名称与分解的名称相匹配。
Assuming you're using linux, you can use nm.
nm --demangle foo.o gives you the demangled names for your symbols
nm --no-demangle foo.o gives you the mangled names for your symbols.
Then you can compare the output of these 2 files to match up the mangled name to the demangled name.
我会使用 objdump 从引用它的对象中提取损坏的名称(您可以使用 c++filt 走向另一个方向,但我知道没有独立的名称)程序给出损坏的名称;您可以使用规范 http://www.codesourcery。 com/public/cxx-abi/abi.html 并创建一个损坏器或手动进行损坏,但这可能有点过头了)。
I'd use
objdump
to extract the mangled name from an object which references it (you can usec++filt
to go in the other direction but I know of no standalone program giving the mangled name; you could use the spec http://www.codesourcery.com/public/cxx-abi/abi.html and creates a mangler or do the mangling manually, but that's probably overkill).