7 个稳定版本
3.0.0 | 2021年12月4日 |
---|---|
2.1.0 | 2021年11月29日 |
2.0.0 | 2021年11月28日 |
1.1.0 | 2021年11月28日 |
1.0.2 | 2021年11月28日 |
#338 in FFI
11KB
154 代码行
crossdylib
此库可用于在共享库/模块之间实现共享状态。
支持
支持的平台
- Windows
- Linux
示例
a.dll
#[macro_use] extern crate crossdylib;
crossdylib! {
static THE_ANSWER: std::sync::Mutex<u32> = std::sync::Mutex::new(39);
}
#[no_mangle]
pub unsafe extern "C" fn increment() {
THE_ANSWER.sync().unwrap();
let mut lock = THE_ANSWER.lock().unwrap();
*lock += 1;
assert_eq!(*lock, 40);
}
b.dll
#[macro_use] extern crate crossdylib;
crossdylib! {
static THE_ANSWER: std::sync::Mutex<u32> = std::sync::Mutex::new(39);
}
#[no_mangle]
pub unsafe extern "C" fn increment() {
THE_ANSWER.sync().unwrap();
let mut lock = THE_ANSWER.lock().unwrap();
*lock += 1;
assert_eq!(*lock, 41);
}
main.exe
fn main() {
let a = Library::new("a.dll").unwrap();
a.get::<extern "C" fn()>("increment").unwrap()();
let b = Library::new("b.dll").unwrap();
b.get::<extern "C" fn()>("increment").unwrap()();
println!("Success");
}
依赖
~0.5–7MB
~26K SLoC