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

And*_*hko 5 windows rust

我使用rustup-init.exeRust推荐的方法Windows 10机器上安装了Rust。安装程序告诉我,Rust需要VS2013或更高版本的C运行时。我已经安装了VS2017,我以为Rust尚不支持VS2017,所以同意安装C-runtime。安装成功完成。

main.rs

fn main() {
    println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)

编译:

fn main() {
    println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)

link.exe LIBPATH arg被指定两次。

这是怎么回事?

> 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
Run Code Online (Sandbox Code Playgroud)

She*_*ter 5

正如rustup文档所述

如Rust下载页面所述,Windows上有两个正在使用的ABI:Visual Studio使用的本机(MSVC)ABI和GCC工具链使用的GNU ABI。您需要哪种Rust版本很大程度上取决于要与哪些C / C ++库进行互操作:要与Visual Studio生产的软件互操作,请使用Rust的MSVC版本;要与使用MinGW / MSYS2工具链构建的GNU软件互操作,请使用GNU构建。

您已经安装了MSVC工具链。但是,你正在运行的编译器在命令shell中,其中link.exe没有指向MSVC链接,而是一个GNU工具链- MSVC不调用它的链接/usr/bin/link或使用选项,如--help

您应该配置您的外壳程序,以便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'
Run Code Online (Sandbox Code Playgroud)
> 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'
Run Code Online (Sandbox Code Playgroud)

我以为Rust还不支持VS2017

支持 VS2017很好; 如1.17发行说明中所述,问题在于由于MSVC安装位置的变化,它无法自动找到MSVC安装。从具有适当环境的外壳程序内部运行Rust编译器可以正常工作。