Reputation: 69
I'm adjusting the build process of a library written in Rust. The goal is to have it compile on Windows with MSVCC. Due to some specific dependencies, I have to make sure that the correct MSVCC linker is being used, so I've set up a project-specific configuration file for Cargo with:
[target.x86_64-pc-windows-msvc]
linker = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/link.exe"
When I run cargo build
now, my build-script build.rs
is no longer executed. Since the script provides the paths for important libraries, the building process eventually fails.
To reproduce the problem under Windows 10 (64-bit) with Visual Studio 12, create a project as follows:
| 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/config:
[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!");
}
When you call cargo build
, linking should fail with
LINK : fatal error LNK1181: cannot open input file 'advapi32.lib'
Upvotes: 4
Views: 2069
Reputation: 69
Currently, the stable version of Rust fails at including the proper libraries (namely the Windows SDK) when the VS linker is specified explictly. Consequently, the build-script could not be linked and building failed.
Recent changes in the nightly have solved this problem. Just switch to the nightly or wait until it is merged to the stable version.
Upvotes: 2