1.1 创建库项目
cargo new --lib plugin cd plugin
1.2 编写加法功能函数
vim src/lib.rs
#[no_mangle] pub extern fn add(left: usize, right: usize) -> usize { left + right } #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { let result = add(2, 2); assert_eq!(result, 4); } }
1.3 修改配置
vim Cargo.toml
[package] name = "plugin" version = "0.1.0" edition = "2023" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] crate-type = ["cdylib"] [dependencies]
1.4 编译成库
cargo build --release
2. 1 创建测试项目
cargo new test-plugin cd test-plugin
2.2 编写配置文件
vim Cargo.toml
[package] name = "test-plugin" version = "0.1.0" edition = "2023" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] libloading = "0.6"
2.3 编写测试代码
vim src/main.rs
use std::path::Path; use libloading::{Library, Symbol}; fn main() { // 指定动态连接库路径 let library_path = Path::new("/home/navy/Desktop/test/plugin/target/release/libplugin.so"); // 加载动态连接库 let lib = Library::new(library_path).expect("Failed to load library"); // 获取动态连接库中的add函数 unsafe { let add: Symbol<unsafe extern "C" fn(usize, usize) -> usize> = lib.get(b"add").expect("Failed to get symbol"); // 调用add函数 let a = 1; let b = 2; let result = add(a, b); println!("{} + {} = {}", a,b,result); } }
2.4 运行测试
cargo run
3 项目目录结构