gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:00:29 24 4
gpt4 key购买 nike

我正在调整用 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 不再执行。由于脚本提供了重要库的路径,因此构建过程最终失败。

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

|   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"

源代码/main.rs:

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

当您调用 cargo build 时,链接应该失败并显示

LINK : fatal error LNK1181: cannot open input file 'advapi32.lib'

最佳答案

更新:

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

解决方案:

nightly 最近的改动解决了这个问题。只需切换到 nightly 或等到它合并到稳定版本。

关于build - 如何让 Cargo 执行构建脚本并同时使用目标特定的链接器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41452469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com