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 及更高版本中,系統呼叫透過 libSystem.dylib 發出,這得到了作業系統的支援。

怎麼辦

如果這是一個您下載或安裝的程式(例如,使用 Homebrew),您需要下載或安裝一個使用新版 Go 構建的更新版本。

如果這是一個您從原始碼構建的程式,您需要使用新版 Go 重新構建它。

您可能需要檢查您的 $PATH,並手動清理 $GOPATH/bin 和您安裝的其他舊的相關 Go 二進位制檔案。

如果您正在嘗試編譯 Go,go tool dist clean 可能會有幫助。


此內容是 Go Wiki 的一部分。