Я сейчас играю с DynamicLibrary
.
Код моей динамической библиотеки (скомпилирован с rustc --crate-type dylib dylib.rs
):
// dylib.rs
#[no_mangle]
pub fn minicall() -> u8 {
3u8
}
И код для его вызова:
// caller.rs
use std::dynamic_lib::DynamicLibrary;
fn main() {
let mut v = Vec::new();
DynamicLibrary::prepend_search_path(&::std::os::getcwd());
match DynamicLibrary::open(Some("./libdylib.so")) {
Err(e) => panic!("ERROR: {}", e),
Ok(lib) => {
println!("Unsafe bloc !");
let func = unsafe {
match lib.symbol::< fn() -> u8 >("minicall") {
Err(e) => { panic!("ERROR: {}", e) },
Ok(f) => { *f },
}
};
println!("call func !");
let new_value = func();
println!("extend vec !");
v.push(new_value);
}
}
println!("v is: {}", v);
}
У меня есть этот вывод:
~> ./caller
Unsafe bloc !
call func !
Illegal instruction
И здесь я совсем потерялся. Что я делаю неправильно?