g ++模板名称修改

时间:2010-11-03 09:21:39

标签: c++ templates g++ inline-assembly name-mangling

我需要在g ++内联汇编中使用模板类成员的地址(作为编译时常量值)。有可能表达这个吗? (我认为我需要名称为T<U>::x)。

template < typename U >
struct T {
  static int x;
};

template < typename U >
void f () {
  asm ("somecommand T<U>::x");
}

2 个答案:

答案 0 :(得分:1)

假设你使用的是linux,你可以使用nm。

nm --demangle foo.o为您提供符号的demangled名称 nm --no-demangle foo.o为您提供符号的错位名称。

然后,您可以比较这两个文件的输出,以便将损坏的名称与解码名称相匹配。

答案 1 :(得分:0)

我使用objdump从引用它的对象中提取受损的名称(你可以使用c++filt向另一个方向移动,但我知道没有独立的程序会给出错误的名字;您可以使用规范http://www.codesourcery.com/public/cxx-abi/abi.html并创建一个缩放器或手动修改,但这可能是矫枉过正的。)