Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

古いrustを新しいMacで動かす

全部 https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/.E2.9C.94.20How.20can.20I.20fix.20Rust.201.2E53.2E0.20or.20earlier.20to.20run.20on.20macOS.2012.2E6.3F/near/299263887 に書いてあった。

一応 TL;DR のためにまとめておくと、最近の Mac の環境 ( CommandLine Tool for Xcode 14.0 ?) で Rust 1.53 以前を使おうとすると、 ld: in ... .rlib(lib.rmeta), archive member 'lib.rmeta' with length ... is not mach-o or llvm bitcode file というメッセージが出てリンカが動かないという現象。リンク先も 9 月のやりとりなので、おそらく 2022 年の秋頃から起きている。

現状これを回避するには新しい Rust を使えばよいが、どうしても古い Rust を使いたい人のためのワークアラウンドとして別のリンカを使う方法があり、 brew install mold した後に、対象プロジェクトに .cargo/config.toml ファイルを作り、

[target.x86_64-apple-darwin]
linker = "/usr/bin/clang"
rustflags = ["-C", "link-arg=--ld-path=/usr/local/bin/ld64.mold"]

と書くと ld を使わないのでこの問題を回避できる。

なお、 VSCode で rust-analyzer を使うことまでやりたいのであれば、以下のエントリも大いに役立つであろう。

zenn.dev