如何让Cargo执行构建脚本并同时使用特定于目标的链接器?

时间:2017-01-03 21:13:45

标签: build linker rust rust-cargo

我正在调整用Rust编写的库的构建过程。目标是在Windows上使用MSVCC进行编译。由于某些特定的依赖关系,我必须确保使用正确的MSVCC链接器,因此我为Cargo设置了一个特定于项目的配置文件:

[target.x86_64-pc-windows-msvc]
linker = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/link.exe"

现在运行cargo build时,我的构建脚本build.rs不再执行了。由于脚本为重要库提供了路径,因此构建过程最终会失败。

要使用Visual Studio 12在Windows 10(64位)下重现该问题,请按如下方式创建项目:

|   build.rs
|   Cargo.toml
|
+---.cargo
|       config
|
\---src
        main.rs

./ build.rs:

use std::env;

fn main() {
    let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
    panic!("Building!");
}

./ Cargo.toml:

[package]
name = "some_binary"
version = "0.1.0"
build = "build.rs"

.cargo /配置:

[target.x86_64-pc-windows-msvc]
linker = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/link.exe"

的src / main.rs:

fn main() {
    println!("Hello, world!");
}

当您致电cargo build时,链接应该以

失败
  

LINK:致命错误LNK1181:无法打开输入文件   ' advapi32.lib'

1 个答案:

答案 0 :(得分:2)

更新

目前,当明确指定VS链接器时,Rust的稳定版本无法包含正确的库(即Windows SDK)。因此,无法链接构建脚本并且构建失败。

解决方案:

夜间最近的变化解决了这个问题。只需切换到每晚或等到合并到稳定版本。