Rust 言語のソースを、Rust の Alpine ベースイメージ(rust:alpine)を使って Docker でビルドすると、error: cannot produce … as the target `x86_64-unknown-linux-musl` does not support these crate types エラーが出る。
# cargo build --release
error: cannot produce cdylib for `block-access v0.1.0 (/feather/quill/example-plugins/block-access)` as the target `x86_64-unknown-linux-musl` does not support these crate types
「rust cargo docker alpine error: cannot produce x86_64-unknown-linux-musl does not support these crate types」でググっても Alpine 以外のイメージを使う情報しかなかったので、自分のググラビリティとして。
TL; DR (今北産業)
環境変数 RUSTFLAGS に “-C target-feature=-crt-static” をセットする。
例) RUSTFLAGS=”-C target-feature=-crt-static” cargo build –release
すべてのエラーにおいて有効というわけではない。
サンプル
FROM rust:alpine
WORKDIR /workspace
# Alpine でコンパイルならとりま入れておけパック
RUN apk add –no-cache \
alpine-sdk \
build-base
# アプリが依存するライブラリをインストール
RUN apk add –no-cache \
openssl-dev \
xcb-util-dev \
python3-dev
# アプリのソースと依存パッケージのダウンロード
RUN \
git clone https://github.com/iceiix/stevenarella.git && \
cd stevenarella && \
cargo fetch
# メインパッケージのビルド
RUN \
RUSTFLAGS=”-C target-feature=-crt-static” cargo build –release
参考文献
-
- “target doesn’t support these crate types” error on x86_64-unknown-linux-musl host” | Issue #7154 | Cargo | Rust-lang @ GitHub
Unable to find crate proc_macro on musl target | Issue #40174 | Rust | Rust-lang @ GitHub
Rust でしっかりとスタティックリンク @ Qiita