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

时间:2017-04-30 22:42:07

标签: windows rust

我在带有rustup-init.exe的Windows 10计算机上安装了Rust,这是Rust Book中建议的方法。安装程序告诉我,Rust需要VS2013的C-runtime或更新版本。我安装了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)

1 个答案:

答案 0 :(得分:3)

正如rustup documentation所说:

  

正如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不调用其链接器{{1}或使用/usr/bin/link等选项!

您应该配置shell,以便MSVC链接器在PATH中最重要,或者如果这是您的目标,则切换到GNU ABI。

比较两者的帮助输出:

--help
$ 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'
  

我认为Rust还不支持VS2017

支持 VS2017就好了;正如the 1.17 release notes中所述,问题在于cannot automatically find the MSVC installation due to changes in where MSVC installs。从具有适当环境的shell内部运行Rust编译器可以正常工作。