M1 MacBook で「実践Rust入門」

2021/12/12に公開

実践Rust入門のサンプルコードをM1 MacBookで動かすためのあれやこれやです。

動作環境

> uname -a
Darwin M1-MacBook-Pro-16-2021.local 21.1.0 Darwin Kernel Version 21.1.0: Wed Oct 13 17:33:01 PDT 2021; root:xnu-8019.41.5~1/RELEASE_ARM64_T6000 arm64

> brew --version
Homebrew 3.3.6
Homebrew/homebrew-core (git revision c8923cc5c13; last commit 2021-12-04)
Homebrew/homebrew-cask (git revision 9ea04cf41c; last commit 2021-12-04)

> cargo --version
cargo 1.56.0 (4ed5d137b 2021-10-04)

> rustc --version
rustc 1.56.1 (59eed8a2a 2021-11-01)

> lldb --version
lldb-1300.0.32.4
Swift version 5.5.1-dev

> docker --version
Docker version 20.10.10, build b485636

11章 Webアプリケーション、DB接続

cargo add が使えない

location 2352に「インストールしてみましょう」とあるが読み飛ばしていると後でハマる。

cargo install cargo-edit

docker-compose.yml

書式が変わったようで、全体を services: セクションに含めるようにしないといけない。(動作確認したファイルはこちら

libpq

M1 macOSにはlibpqが含まれていないようなので brew install libpq でインストール。
cargo build などでは RUSTFLAGS 環境変数にてライブラリの場所を指定する必要がある。

RUSTFLAGS='-L /opt/homebrew/opt/libpq/lib

12章 - FFI

ローカルディレクトリへの Onigmo のインストール

sudo make install をやりたくなかったので、./configure --prefix="${PWD}" としてローカルにインストールしました。(ビルドスクリプト)

onigmo-sys のビルド

build.rs 内部で .clang_arg() でヘッダファイルの場所を指定する必要があります。
また、手元の環境では Stable_1_28 が定義されておらずエラーになりましたが、代わりに1_20や1_27でビルドできました。

 fn main() {
     println!("cargo:rustc-link-lib=onigmo");
     let bindings = bindgen::Builder::default()
         .header("wrapper.h")
+        .clang_arg("-I../../onigmo/include")
-        .rust_target(bindgen::RustTarget::Stable_1_28)
+        .rust_target(bindgen::RustTarget::Stable_1_27)

Rustラッパ onigmo のビルド

ビルドでは RUSTFLAGS 実行時には DYLD_LIBRARY_PATH 環境変数でOnigmoのインストール場所を教えてあげる必要があります。

例:

export DYLD_LIBRARY_PATH="${PWD}/../../onigmo/lib"
export RUSTFLAGS="-L${PWD}/../../onigmo/lib"
cargo run --example simple

Discussion