g++模板名称修改

发布于 2024-09-30 13:46:42 字数 266 浏览 7 评论 0原文

我需要在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绝情姑娘 2024-10-07 13:46:42

假设您使用的是 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.

人间☆小暴躁 2024-10-07 13:46:42

我会使用 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 use c++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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文