链接到构建文件夹外的Windows库

Del*_*ore 6 windows ffi rust

有没有办法链接不在当前包路径中的库.

链接建议将所有内容放在本地目录下.我们的包安装在其他地方的某个存储库中 我只想在windows上指定它的libpath.

authors = ["Me"]
links = "CDbax"

[target.x86_64-pc-windows-gnu.CDbax]
rustc-link-lib = ["CDbax"]
rustc-link-search = ["Z:/Somepath//CPP/CDbax/x64/Debug/"]
root = "Z:/Somepath//CPP/CDbax/x64/Debug/"
Run Code Online (Sandbox Code Playgroud)

但尝试货物建造-v给了我

package `hello v0.1.0 (file:///H:/Users/Mushfaque.Cradle/Documents/Rustc/hello)` specifies that it links to `CDbax` but does not have a custom build script
Run Code Online (Sandbox Code Playgroud)

从货物构建脚本支持指南,它似乎表明这应该工作.但我可以看到它没有添加路径.bin\x68_64-pc-windows-gnu\然而,将lib移动到本地路径中是有效的.

更新 感谢下面的答案,我想我会更新这个,以便给出我的机器上有效的最终结果,以便其他人发现它很有用.

在Cargo.toml中添加

links = "CDbax"
build = "build.rs"
Run Code Online (Sandbox Code Playgroud)

即使没有build.rs文件,它似乎需要它(?)否则抱怨

package `xxx v0.1.0` specifies that it links to `CDbax` but does not have a custom build script
Run Code Online (Sandbox Code Playgroud)

随后Vaelden回答在.cargo中创建一个'配置'文件

如果这是一个子包,你不需要将links =标记放在父包中,即使它是一个dll; 即使是'货运'.我假设它将dll路径添加到执行环境中

Vae*_*den 6

我认为问题在于您错误地将货物配置中的项目清单错误.

  • 清单Cargo.toml在你的项目的根文件.它描述了您的项目本身.
  • 货物的配置描述特定设置的货物,并允许例如覆盖的依赖,或在您的情况下覆盖构建脚本.该货物的配置文件有一个分层结构:

Cargo允许为特定项目或全局配置(如git)进行本地配置.Cargo还将此功能扩展到分层策略.例如,如果在/ home/foo/bar/baz中调用货物,则将探测以下配置文件:

/home/foo/bar/baz/.cargo/config
/home/foo/bar/.cargo/config
/home/foo/.cargo/config
/home/.cargo/config
/.cargo/config
Run Code Online (Sandbox Code Playgroud)

使用此结构,您可以指定每个项目的本地配置,甚至可以将其检入版本控制.您还可以在主目录中使用配置文件指定个人默认值.

所以如果你移动相关部分:

[target.x86_64-pc-windows-gnu.CDbax]
rustc-link-lib = ["CDbax"]
rustc-link-search = ["Z:/Somepath//CPP/CDbax/x64/Debug/"]
root = "Z:/Somepath//CPP/CDbax/x64/Debug/"
Run Code Online (Sandbox Code Playgroud)

到货物配置文件的任何正确位置,它应该工作.