1. 创建工程
选择合适的文件夹,执行下面的命令:
$ cargo new hello
$ cargo new hellolib --lib
会在当前文件夹下创建两个新的 package 文件夹:hello、hellolib, 其中 hello 是可执行文件,hellolib 是我们要编写的库文件。接下来我们看如何编写库文件,如何调用库文件中的函数。
2. 源代码
hellolib/src/lib.rs:
pub fn say() {
println!("hello!");
}
hello/src/main.rs:
extern crate hellolib;
fn main() {
hellolib::say();
}
hello/Cargo.toml: 添加依赖项 hellolib = { path = "../hellolib"}
[package]
name = "hello"
version = "0.1.0"
authors = ["yeping"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
hellolib = { path = "../hellolib"}
编译运行,一切都妥妥的!
3. 引用编译后的 *.rlib 静态库文件
查看了一下,刚才的那个库文件编译后生成了名为 libhellolib.rlib 的文件,直接复制到 hello 文件夹。打算通过配置 Cargo.toml 文件的依赖项,结果昨晚我连续研究了几个小时一直到凌晨两点都没解决。如果有谁解决了这个问题,请给我留言,在此先表示感谢!
好在可以通过 rustc 编译参数搞定,命令如下:
rustc main.rs —-extern hellolib=./libhellolib.rlib
编译完成后,运行目标程序,OK搞定!
4. 没有了 c++ 的头文件,如何了解 *.rlib 的内容?
还没仔细研究,根据其他语言的经验我觉得三个主要途径吧:
- 人工编写静态库接口文档
- 利用 cargo doc 命令生成接口文档
- 利用反射机制,通过程序自动提取
目前我需要尽快进入生产状态,这个等以后有时间慢慢研究。
原创不易,如果对您有帮助,请关注、点赞,谢谢支持!