Go Wiki: MacOS12BSDThreadRegisterIssue

はじめに

macOS 12 Montereyで実行中のGoプログラムが以下のようなエラーメッセージを表示したためにこのページにたどり着いた場合、

fatal error: runtime: bsdthread_register error

runtime stack:
runtime.throw(0x20594e0, 0x21)
    /usr/local/go/src/runtime/panic.go:619 +0x81 fp=0x7ff7bfeff878 sp=0x7ff7bfeff858 pc=0x1029751
runtime.goenvs()
    /usr/local/go/src/runtime/os_darwin.go:129 +0x83 fp=0x7ff7bfeff8a8 sp=0x7ff7bfeff878 pc=0x10272d3
runtime.schedinit()
    /usr/local/go/src/runtime/proc.go:496 +0xa4 fp=0x7ff7bfeff900 sp=0x7ff7bfeff8a8 pc=0x102c014
runtime.rt0_go(0x7ff7bfeff930, 0x3, 0x7ff7bfeff930, 0x1000000, 0x3, 0x7ff7bfeffab0, 0x7ff7bfeffabf, 0x7ff7bfeffac3, 0x0, 0x7ff7bfeffacc, ...)
    /usr/local/go/src/runtime/asm_amd64.s:252 +0x1f4 fp=0x7ff7bfeff908 sp=0x7ff7bfeff900 pc=0x1052c64

それは古いバージョンのGo (Go 1.10以前) でビルドされたプログラムを実行していることになります。プログラムを更新するか、新しいバージョンのGoで再ビルドする必要があります。

詳細

Go 1.10以前でビルドされたプログラムは、macOS 12 Montereyのカーネルではもはやサポートされていない方法でシステムコールを発行します。Go 1.11以降では、システムコールはOSがサポートするlibSystem.dylibを介して発行されます。

対処法

ダウンロードまたはインストールしたプログラム(例えばHomebrewを使用した場合)であれば、新しいバージョンのGoでビルドされた、より新しいバージョンのものをダウンロードまたはインストールする必要があります。

ソースからビルドしたプログラムであれば、新しいバージョンのGoで再ビルドする必要があります。

$PATHを確認し、$GOPATH/binやその他インストールした古い関連Goバイナリを手動でクリーンアップすることをお勧めします。

Goをコンパイルしようとしている場合、go tool dist cleanが役立つかもしれません。


このコンテンツはGo Wikiの一部です。