外部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
预导入。
no_link
属性
可在 extern crate
条目上指定 no_link
属性 ,以阻止将 crate 链接到输出中。
这通常仅用于加载和访问 crate 中的宏。