我无法在Windows上创建DLL“往返”。我想在板条箱a
中生成一个DLL(以及后来的.so
,...),我们希望将该DLL交付给客户。看起来像这样:
来自a/src/lib.rs
:
#[no_mangle]
pub unsafe extern "C" fn f(x: i32) -> i32 {
x * x
}
来自a/Cargo.toml
:
[lib]
name = "a_library"
path = "src/lib.rs"
crate-type = [ "cdylib" ]
要测试该DLL,我有一个条板箱b
,要在其中加载它并调用其功能。看起来像这样:
来自b/src/main.rs
:
#[link(name = "a_library", kind = "dylib")]
extern "C" {
fn f(x: i32) -> i32;
}
来自b/Cargo.toml
:
[dependencies]
a = { path = "../a" }
将crate-type
设置为cdylib
会产生a_library.dll
和a_library.dll.lib
。
.dll
是我想要的。它应该产生一个动态(链接)库,而不产生静态库。同样,当我测试时,我想针对动态库进行测试。
我正在使用nightly-x86_64-pc-windows-msvc
/ 1.37.0-nighly
,但是该解决方案应该可以在任何地方运行(包括稍后的MacOS / Linux)。
Repository with minimal test case that exhibits problem on Windows.
但是,当我现在想在b
中运行/测试我的测试应用程序时,我收到
LINK : fatal error LNK1181: cannot open input file 'a_library.lib'.
嗯,这是正确的,因为Rust实际上从未从板条箱a_library.lib
产生a
,而只是产生a_library.dll.lib
。
我必须对板条箱b
进行什么更改才能使它起作用?
(我愿意更改a
,只要它继续产生DLL,并且只要b
在测试{{1}时仍然动态链接到a
}。