在dylib中调用外部函数
Call external function in dylib
我的主应用程序代码如下所示:
pub fn load_lib() {
let dylib = libloading::Library::new("example.dylib") ...
unsafe { *dylib.get(b"fn_in_dylib") } ...
// calling function from dylib.
}
pub extern "Rust" fn fn_in_main_app() { ... } // Function that I want to call from dylib
example.dylib
dyliib 加载成功,调用 dylib 的函数没有任何问题。
但这是我在 dylib 中尝试做的事情:
pub extern "Rust" fn fn_in_dylib() {
fn_in_main_app(); // Here I'm trying to call function defined in main application.
}
extern "Rust" {
fn fn_in_main_app();
}
但这甚至无法编译:
Undefined symbols for architecture x86_64:
"_fn_in_main_app", referenced from:
我不确定我是否使用了正确的方法来实现它,所以当它没有编译时我并不感到惊讶。但我希望它展示了我真正想要做的事情。
Dylib 不能依赖加载它们的应用程序。 dylib 依赖图必须是完全线性的,不允许循环依赖。根据您正在做的事情,可以将 fn_in_main_app
移动到 dylib 的上游依赖项。您还可以将函数指针传递给 dylib:
pub extern "Rust" fn fn_in_dylib(fn_in_main_app: fn()) {
(fn_in_main_app)();
}
我的主应用程序代码如下所示:
pub fn load_lib() {
let dylib = libloading::Library::new("example.dylib") ...
unsafe { *dylib.get(b"fn_in_dylib") } ...
// calling function from dylib.
}
pub extern "Rust" fn fn_in_main_app() { ... } // Function that I want to call from dylib
example.dylib
dyliib 加载成功,调用 dylib 的函数没有任何问题。
但这是我在 dylib 中尝试做的事情:
pub extern "Rust" fn fn_in_dylib() {
fn_in_main_app(); // Here I'm trying to call function defined in main application.
}
extern "Rust" {
fn fn_in_main_app();
}
但这甚至无法编译:
Undefined symbols for architecture x86_64:
"_fn_in_main_app", referenced from:
我不确定我是否使用了正确的方法来实现它,所以当它没有编译时我并不感到惊讶。但我希望它展示了我真正想要做的事情。
Dylib 不能依赖加载它们的应用程序。 dylib 依赖图必须是完全线性的,不允许循环依赖。根据您正在做的事情,可以将 fn_in_main_app
移动到 dylib 的上游依赖项。您还可以将函数指针传递给 dylib:
pub extern "Rust" fn fn_in_dylib(fn_in_main_app: fn()) {
(fn_in_main_app)();
}