无法在Windows上链接hello_world程序:/ usr / bin / link:额外的操作数

我使用Rustup-init.exe在Rust 10上安装了Rust,这是Rust Book推荐的方法。 安装程序告诉我,Rust需要VS2013或更新版本的C运行时。 我安装了VS2017,我认为Rust不支持VS2017,所以同意安装C-runtime。 安装成功完成。

main.rs

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

编译:

 > rustc main.rs error: linking with `link.exe` failed: exit code: 1 | = note: "link.exe" "/NOLOGO" "/NXCOMPAT" "/LIBPATH:C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "main.0.o" "/OUT:main.exe" "/OPT:REF,NOICF" "/DEBUG" "/LIBPATH:C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-0a78323911070f99.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librand-c279a51d66700350.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcollections-d7bf31a4ca1ea637.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd_unicode-d367c3ba0db49600.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-2d4bf02140c11dcb.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-add7a84d7e82d084.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liblibc-84688accbc86d6b7.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-fe2e68b21f0bdd7a.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc_system-7fc0381594c93f56.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-ea9d77e7c23fe65c.rlib" "C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-91b619d34dd1f5aa.rlib" "advapi32.lib" "ws2_32.lib" "userenv.lib" "shell32.lib" "msvcrt.lib" = note: /usr/bin/link: extra operand '/LIBPATH:C:\\Users\\***\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib' Try '/usr/bin/link --help' for more information. error: aborting due to previous error 

link.exe LIBPATH arg被指定了两次。

这是怎么回事?

 > rustc --version rustc 1.17.0 (56124baa9 2017-04-24) 

正如锈蚀文件所说:

正如Rust下载页面中提到的那样,Windows上有两个ABI:Visual Studio使用的本机(MSVC)ABI,以及GCC工具链使用的GNU ABI。 你需要哪种版本的Rust,主要取决于你想要与哪些C / C ++库进行互操作:与Visual Studio生成的软件互操作使用Rust的MSVC版本; 与使用MinGW / MSYS2工具链构建的GNU软件进行互操作,使用GNU构建。

您已经安装了MSVC工具链。 但是,您正在命令行中运行编译器,其中link.exe不指向MSVC链接器,而是指向GNU工具链 – MSVC不会调用其链接器/usr/bin/link或使用诸如--help选项!

你应该配置你的shell,使得MSVC链接器在PATH中最重要,或者如果你的目标是切换到GNU ABI。

比较两者的帮助输出:

 $ link --help Usage: link FILE1 FILE2 or: link OPTION Call the link function to create a link named FILE2 to an existing FILE1. --help display this help and exit --version output version information and exit GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Full documentation at: <http://www.gnu.org/software/coreutils/link> or available locally via: info '(coreutils) link invocation' 
 > link /help Microsoft (R) Incremental Linker Version 14.10.25017.0 Copyright (C) Microsoft Corporation. All rights reserved. For help on Linker, type `link /link' or `link' For help on Library Manager, type `link /lib' or `lib' For help on Dumper, type `link /dump' or `dumpbin' For help on Editor, type `link /edit' or `editbin' For help on CvtCIL, type `link /cvtcil' 

我以为Rust不支持VS2017呢

支持 VS2017就好了; 如1.17发行说明中所述,问题是由于MSVC安装位置的变化,无法自动查找MSVC安装 。 从具有适当环境的shell中运行Rust编译器可以正常工作。