3

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

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

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

2 回答 2

1

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

nm --demangle foo.o 为您的符号提供经过修饰的名称 nm --no-demangle foo.o 为您提供符号的修饰名称。

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

于 2010-11-03T12:58:03.443 回答
0

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

于 2010-11-03T12:52:25.650 回答