Windows 如何告诉rustc(通过货物)在哪里找到我的dll导入库
我正在用mingw生成一个dll供rust使用。我知道我可以将我的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子目录中 另一种可能更方便的方法是使用一个函数将库目录自动传递给
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上。