外部crate声明

语法:
外部Crate :
   extern crate Crate引用 As从句? ;

Crate引用 :
   标识符 | self

As从句 :
   as ( 标识符 | _ )

一个 extern crate 声明 指定了对一个外部 crate 的依赖。 外部 crate 绑定到 extern crate 声明中提供的标识符。 此外,如果 extern crate 出现在 crate 根,则 crate 名称也会被添加到 extern 预定义 中,刚自动处于所有模块的作用域内。 可以使用 as 从句将导入的 crate 绑定到不同的名称。

编译时,外部 crate 会被解析为一个特定的 soname,并且对于该 soname 的运行时链接需求会在编译时传递给链接器进行加载。 编译时,编译器会扫描其库路径,并根据外部 crate 编译时声明的 crate_name 属性 与可选的 crate_name 进行匹配,以解析出 soname。 如果没有提供 crate_name,则会假定一个默认的 name 属性,等于 extern crate 声明中给出的 标识符

可以导入 self 作为当前 crate 的绑定,此时必须使用 as 从句来指定绑定名称。

extern crate 声明的三个例子:

extern crate pcre;

extern crate std; // 等价于: extern crate std as std;

extern crate std as ruststd; // 以另一个名字链接到 'std' 。

在 Rust 中,crate 的命名不允许使用连字符。 然而,Cargo 包允许使用连字符。 如果在 Cargo.toml 中没有指定 crate 名称,则 Cargo 会自动将 - 替换为 _,这个行为详见 RFC 940

下面是一个例子:

// 导入 Cargo hello-world 包 
extern crate hello_world; // 连字符替换为下划线

外部预定义

本节已移至 预定义 — 外部预定义

下划线导入

可以使用 extern crate foo as _ 的形式声明外部 crate 依赖,不将其名称绑定到作用域中。 这只链接,而不引用 crate 中的条目,避免报告未使用。

macro_use 属性 按照惯例导入宏名到 macro_use 预导入

可在 extern crate 条目上指定 no_link 属性 ,以阻止将 crate 链接到输出中。 这通常仅用于加载和访问 crate 中的宏。