2017-04-30 2 views
2

WindowsマシンにRustをインストールしました。rustup-init.exe - Rust Bookで推奨されています。インストーラは、RustはVS2013以上のCランタイムを必要としていることを教えてくれました。私はVS2017をインストールしていますが、RustはまだVS2017をサポートしていないと思っており、Cランタイムをインストールすることに同意しました。インストールは正常に終了しました。Windows上でhello_worldプログラムをリンクすることはできません:/ usr/bin/link:余分なオペランド

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.exeLIBPATH argは2回指定されています。

何が起こっているのですか?

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

答えて

2

rustup documentationが言うように:ネイティブのVisual Studioで使用される(MSVC)ABI、およびGNU ABI:

を錆ダウンロードページに述べたように、Windows上で使用されている2つのABIのがありますGCCツールチェーンによって使用されます。あなたが必要とするRustのバージョンは、相互運用するC/C++ライブラリの大部分によって異なります。Visual Studioで作成されたソフトウェアとの相互運用には、RustのMSVCビルドを使用します。 MinGW/MSYS2ツールチェーンを使用して構築されたGNUソフトウェアとの相互運用性については、GNUビルドを使用してください。

MSVCツールチェーンをインストールしました。ただし、link.exeではないのコマンドシェルでコンパイラを実行していますが、MSVCリンカーを指しているのではなく、MSVCがリンカー/usr/bin/linkを呼び出すのではなく、--helpのようなオプションを使用します。

MSVCリンカがPATH上にあるようにシェルを設定するか、それが目的ならばGNU ABIに切り替える必要があります。

2のヘルプ出力の比較:

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

私は錆はまだVS2017をサポートしていないと仮定

をそれははうまく VS2017をサポートしています。 the 1.17 release notesに記載されているように、問題はcannot automatically find the MSVC installation due to changes in where MSVC installsです。適切な環境を持つシェルの内部からRustコンパイラを実行するとうまく動作します。

+0

VS Link.exeへのパスを '%PATH%'(私の場合はGit BashパッケージのGNU link.exeの前)に追加し、 '%LIB%'を 'cに設定する:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.10.25017:¥Program Files(x86)¥Windows Kits¥10¥Lib¥10.0.14393.0¥um¥x64¥私の特別なケースでは( 'c:\ Program Files(x86)\ Microsoft Visual Studio \ lib \ x64 \; c:\ Program Files(x86)\ Windows Kits \ 10 \ Lib \ 10.0.14393.0 \ ucrt \ x64 \ \ 2017 \ Community \ VC \ Auxiliary \ Build \ vcvarsall.bat'は助けになりませんでした)。 –

関連する問題