3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rust/GoアプリケーションのAWS Lambda向けクロスビルド方法

Last updated at Posted at 2025-09-06

概要

前回はPythonのデプロイパッケージのクロスビルドを紹介しました。
https://qiita.com/lucidfrontier45/items/5f285290500639bc6a82

今回はRustとGoについて、主にLinux向けのクロスビルド方法をまとめます。

これでAWS Lambda向けの開発がはかどりますね。

Rust

Rustのtoolchainに含まれるコンパイラのrustc自体は様々なターゲット向けにコンパイルすることができますが、linkerを含んでいないのとCに依存したRustのライブラリの時にやはりCのコンパイラが必要になるのでRustのtoolchainだけでは完結しません。Linux向けのクロスビルドの環境を構築する最も簡単な方法はZigを使用することです。といってもZig言語とは全く関係なく、もっぱらZigにCのtoolchainを利用するのがポイントになります。Zigに含まれるzigコマンドはCのコンパイラやリンカーとしても使用でき、さらに様々なターゲット向けのヘッダーファイルも含んでいるのです。

そしてZigをRustのinnkerやCのコンパイラとしてCargoに統合する拡張がcargo-zigbuildです。

クロスビルドの環境構築と実際の手順をまとめると以下の通りになります。

  1. Rustのtargetを追加する rustup target add [x86_64|aarch64]-unknown-linux-[gnu|musl]
  2. Zigを公式サイトからダウンロードしてPATHを通す。
  3. cargo-zigbuildをGitHubのリリースページからダウンロードしてPATHを通す。
  4. cargo zigbuild --release --target x86_64|aarch64]-unknown-linux-[gnu|musl]

Go

GoはRustとは異なり、toolchain自体にlinkerも含んでいますので大抵は

GOOS=linux GOARCH=[amd64|arm64] go build

で事足りますが、一部のDBのドライバーなど一部のライブラリはCを含んでいてCGO_ENABLED=1を指定する必要があります。そしてこの時にはCのコンパイラとlinkerが必要になってきます。ここでも最も簡単な方法はZigを利用することです。

上記の記事をまとめますと手順としてはRustの時と同様にZigをインストールし、

CGO_ENABLED=1 GOOS=linux GOARCH=[amd64|arm64] CC='zig cc -target [x86_64|aarch64]-linux-[gnu|musl]' go build

とするだけです。いくつかの記事ではmuslを使用する場合にはさらに-ldflags='-linkmode=external'が必要と書かれてありますが、私がgo1.25.1で試した限りではおそらくautoになっているのか必要な場合には自動的にlinkmode=externalになってextldにzig cc -target ..が入っていました。もちろんlinkmode=internalを明示的に指定するとエラーになります。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?