符号重整

符号名称重整rustc 用于对代码生成过程中使用的符号进行编码,以生成唯一的名称。编码后的名称由链接器用于将名称与它所指代的事物关联起来。

重整名称的方法可以通过 -C symbol-mangling-version 选项控制。

逐项控制

可以使用 #[no_mangle] 属性 在项目上禁用对该项目的名称重整。

可以使用 #[export_name] 属性 指定将用于函数或静态变量的精确名称。

extern 中列出的项目使用项目的标识符(不进行重整)来引用该项目。可以使用 #[link_name] 属性 更改该名称。

解码

在某些情况下,可能需要对编码后的名称进行解码。例如,调试器和其他工具可能需要对名称进行反重整,以便用户更容易阅读。最近版本的 gdblldb 内置支持反重整 Rust 标识符。在需要自己进行反重整的情况下,可以使用 rustc-demangle crate 以编程方式反重整名称。 rustfilt 是一个可以反重整名称的 CLI 工具。

运行 rustfilt 的示例

$ rustfilt _RNvCskwGfYPst2Cb_3foo16example_function
foo::example_function

重整版本

rustc 支持不同的重整版本,这些版本以不同的方式对名称进行编码。遗留版本(当前是默认版本)在此处没有描述。“v0” 重整方案解决了遗留格式的几个限制,并在 v0 符号格式 章节中进行了描述。