目标是能够在使用该库的板条箱中使用名称混乱的功能(这将允许具有相同标识符的不同模块/名称空间的功能共存)。我注意到Rust(ver .: 1.42)自动假定导出函数的函数标识符被[[not弄乱了。目前,当在功能上使用#[no_mangle]
和#[export_name="..."]
时,我可以成功链接并使用它。我正在使用stable-x86_64-windows-pc-msvc
工具链。
rslib / lib.rs:
#[no_mangle] /* Exports it as "func" */
pub fn func() { ... }
app / main.rs:
#[link(name="rslib.dll", kind="dylib")]
extern { fn func(); }
fn main() {
unsafe { func(); }
}
这可以编译并运行,没有问题。
无效示例rslib / lib.rs:
pub fn func() { ... }
使用相同的“ app / main.rs”会导致链接失败,并出现以下情况:error LNK2019: unresolved external symbol __imp_func referenced in function _ZN8rust_app4main17h52189e261ef80b93E
。