darwin_amd64/link: combining dwarf failed的问题(MacOS升级Ventura之后golang无法编译)

2,004 阅读3分钟

编译报错

最近将Macbook系统升级到 Ventura(版本13.0.1) 之后,发现golang编译报错

.../go1.13.15/pkg/tool/darwin_amd64/link: combining dwarf failed: Unknown load command 0x80000033 (2147483699)

同类问题

搜索一了下,github.com/golang/go有这样一个issue,跟我一样的是go1.13.15遇到的问题。

darwin_amd64/link: combining dwarf failed: Unknown load command 0x80000033 (2147483699) #56605

但是这个问题由于是go的旧版本,所以不予解决,issue本身也己经被关闭了。

image.png

万事只能靠自己,无奈之下,自己尝试解决问题。

尝试升级go版本,无效

我先尝试升级golang的版本,但是升级到go1.14一样有这个问题。

热心网友比多做了更多尝试,这个方法并不能解决问题。

image.png

升级本来就不是一个完美的方案,因为服务器上还是按go1.13编译的

问题是 Xcode Command Lines Tools 升级版本导致

回忆一下从两天前能正常编译,到出问题,中间只做过两个变更:

  1. 升级系统到Ventura(版本13.0.1)
  2. 重新安装 Xcode Command Lines Tools

发现有一个Comment描述的是跟我是同样的问题

image.png

于是我猜想是 XCode Command Lines Tools 升级后产生了不兼容,尝试恢复旧版本

关于 Xcode Command Lines Tools 的介绍,请参考这篇

深入浅出 Xcode Command Lines Tool - 初探

而下面这篇文章印证了我的猜想

macOS Ventura无法使用Xcode13

手动恢复旧版 Xcode Command Lines Tools ,奏效

使用xcode-select --install命令会默认安装最新版本的 XCode Command Lines Tools

可以通过clang -v查看当前安装的工具版本

Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin22.1.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin/.

然后去 developer.apple.com/download/al… apple的网站上搜索并下载旧版本的 XCodeXCode 中会带有对应版本的XCode Command Lines Tools

image.png

手动下载,安装到应用程序中,会在 /Application 目录下找到对应的XCode APP

image.png

然后用xcode-select -p命令重新指定XCode Command Lines Tools路径

xcode-select -s /Applications/Xcode-13.4.1.app/Contents/Developer

此时再通过clang -v看到版本己经变化

Apple clang version 13.1.6 (clang-1316.0.21.2.5)
Target: arm64-apple-darwin22.1.0
Thread model: posix
InstalledDir: /Applications/Xcode-13.4.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

重新执行go build编译,虽然显示如下warning,但可以正常编译运行,成功!!!

ld: warning: object file (/var/folders/nv/f11l1jld7ql771rfz_b21yhc0000gr/T/go-link-473104722/000002.o) was built for newer macOS version (13.0) than being linked (12.3)
ld: warning: object file (/var/folders/nv/f11l1jld7ql771rfz_b21yhc0000gr/T/go-link-473104722/000003.o) was built for newer macOS version (13.0) than being linked (12.3)
ld: warning: object file (/var/folders/nv/f11l1jld7ql771rfz_b21yhc0000gr/T/go-link-473104722/000004.o) was built for newer macOS version (13.0) than being linked (12.3)
ld: warning: object file (/var/folders/nv/f11l1jld7ql771rfz_b21yhc0000gr/T/go-link-473104722/000005.o) was built for newer macOS version (13.0) than being linked (12.3)
ld: warning: object file (/var/folders/nv/f11l1jld7ql771rfz_b21yhc0000gr/T/go-link-473104722/000006.o) was built for newer macOS version (13.0) than being linked (12.3)
...