金魚亭日常

読書,ガジェット,競技プログラミング

brew upgrade したら cargo build が失敗するようになったので直した

初期症状

> cargo build --verbose
...
  = note: collect2: fatal error: ld terminated with signal 11 [Segmentation fault]
          compilation terminated.


error: aborting due to previous error

error: could not compile `syn`.

ld がおかしいらしい。確かに、おかしい。

> ld -v
Segmentation fault

これは、Homebrew でインストールした ld だったので、システム側に変更してみる。

> cat ~/.cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "/usr/bin/ld"

これでビルドしてみると、libgcc がない、と言われたので、以下を参考にしてシンボリックリンクを貼った。

please-sleep.cou929.nu

> ldconfig -p | grep libgcc
        libgccpp.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgccpp.so.1
        libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1

> sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so

これでビルドしてみると、 今度は別のエラーでこけた。 syn をビルドするときに、ファイルが見つからない、みたいなエラー。 たぶん、これと同じ症状。

users.rust-lang.org

ここでお手上げだったのだが、 Homebrew の binutils は本来linkされてないものなので、なんとなく unlink してみたら、ビルドできるようになった。

> brew unlink binutils 

そもそもなんでlinkされてたんだろう…。

Homebrew の ld は相変わらず壊れているのだが、よしとしよう。