Rust - インストール / パッケージング#
インストール#
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- cargo のソースを変更
vi $HOME/.cargo/config
内容
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
Nightly#
# 以下のコマンドでrustcのnightlyバージョンをインストールし、そのバージョンをrustcのデフォルトバージョンに設定できます。
rustup install nightly
rustup default nightly
その他#
# 利用可能なプラットフォームを表示
rustc --print target-list | pr -tw100 --columns 3
# インストール済みを表示
rustup target list | grep installed
# x86_64-unknown-linux-muslをインストール
rustup target add x86_64-unknown-linux-musl
更新#
rustup update
パッケージング#
依存関係の確認#
macOS の場合、依存関係を確認するには
otool -L target/release/workout
Linux の場合、依存関係を確認するには
ldd target/release/バイナリファイル
静的ファイル#
またはcargo install cross --git https://github.com/cross-rs/cross
を使用することもできます。
静的ファイルのパッケージングに問題が発生する場合は、最終的な解決策として Docker のパッケージングを使用してください!
問題#
ファイルロックのブロック待ち...#
rm -rf ~/.cargo/.package-cache
Windows のパッケージング#
質問: msvc のターゲットは msvc リンカに依存していますが、link.exe
が見つかりませんでした。
解決策:
C:\Users\intent\.cargo\bin\rustup uninstall toolchain stable-x86_64-pc-windows-msvc
C:\Users\intent\.cargo\bin\rustup toolchain install stable-x86_64-pc-windows-gnu
C:\Users\intent\.cargo\bin\rustup default stable-x86_64-pc-windows-gnu
または VS Studio をインストールしてください!
質問: Internal error occurred: Failed to find tool. Is musl-gcc
installed?#
回答:これは musl がインストールされていないためです。
git clone https://github.com/richfelker/musl-cross-make.git --depth=1
cd musl-cross-make && TARGET=x86_64-linux-musl make -j8
cd build/local/x86_64-linux-musl/ && make install
# PATH変数を設定する
# rust x86_64-linux-musl
export PATH=/mnt/dev/git/rust/musl-cross-make/build/local/x86_64-linux-musl/output/bin:$PATH
質問: error: failed to run custom build command for openssl-sys v0.9.72
#
Ubuntu の場合
sudo apt install pkg-config
sudo apt install libudev-dev
sudo apt install librust-openssl-sys-dev
sudo apt install libssl-dev
Gentoo の場合
OPENSSL_LIB_DIR=/usr/lib64 OPENSSL_INCLUDE_DIR=/usr/include TARGET_CC=x86_64-linux-musl-gcc cargo build --release --target=x86_64-unknown-linux-musl
質問: reqwest の blocking::Client を blocking::ClientBuilder からビルドすると Segmentation fault が発生する#
# Segmentation fault when building a blocking::Client from a blocking::ClientBuilder
OPENSSL_STATIC=true OPENSSL_DIR=/mnt/dev/git/c/openssl-OpenSSL_1_1_1f/musl TARGET_CC=x86_64-linux-musl-gcc cargo build --release --target=x86_64-unknown-linux-musl
質問: error: failed to run custom build command for `ring v0.16.20`#
sudo apt install musl-tools
コンパイルが遅い場合、リンカーを llvm に変更する#
https://stackoverflow.com/questions/57812916/how-do-i-change-the-default-rustc-cargo-linker