Windows 如何告诉rustc(通过货物)在哪里找到我的dll导入库

Windows 如何告诉rustc(通过货物)在哪里找到我的dll导入库,windows,rust,rust-cargo,Windows,Rust,Rust Cargo,我正在用mingw生成一个dll供rust使用。我知道我可以将我的libxxx.a文件放在“Rust\bin\rustlib\x86\u 64-pc-windows-gnu\lib”目录中,这就是我现在正在做的。但我宁愿把它保存在我的项目目录中。如何让Cargo告诉rustc在哪里找到它?首先,您可以使用Cargo rustc将-L dir参数直接传递给rustc: cargo rustc -- -L lib 如果您的库位于lib子目录中 另一种可能更方便的方法是使用一个函数将库目录自动传递给

我正在用mingw生成一个dll供rust使用。我知道我可以将我的
libxxx.a
文件放在
“Rust\bin\rustlib\x86\u 64-pc-windows-gnu\lib”
目录中,这就是我现在正在做的。但我宁愿把它保存在我的项目目录中。如何让Cargo告诉rustc在哪里找到它?

首先,您可以使用
Cargo rustc
-L dir
参数直接传递给rustc:

cargo rustc -- -L lib
如果您的库位于
lib
子目录中

另一种可能更方便的方法是使用一个函数将库目录自动传递给rustc。然后,如果将以下代码存储到
build.rs
,则它也将与其他cargo命令一起使用,如
run
test
,等等:

fn main() {
    println!("cargo:rustc-link-lib=native=foo");
    println!("cargo:rustc-link-search=native=lib");
}
(假设您的库名为
libfoo.a

然后将
build
键添加到Cargo.toml中的
[package]
部分:

[package]
...
build = "build.rs"
然后它会在每个构建命令中自动找到您的库


请注意,构建脚本也是实际构建库的好地方。货物文档包含关于这方面的示例和链接。

第一部分很有用。但是构建脚本给出了一个错误,说“未知的库类型<代码>本机,应该是动态库、框架或静态库”。我是通过从两行中删除
=native
来实现的。@BenjaminLindley,这看起来像是对cargo的某种版本不匹配。我从官方的货物文件中选取了这些例子。再多玩弄一下,这很奇怪。我试着把“dylib”和“static”放在字符串的那一部分(你把“native”放在那里),它们都很好用。尽管使用了“框架”,但它抱怨没有像预期的那样出现在OSX上。