编译报错
最近将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本身也己经被关闭了。
万事只能靠自己,无奈之下,自己尝试解决问题。
尝试升级go版本,无效
我先尝试升级golang的版本,但是升级到go1.14一样有这个问题。
热心网友比多做了更多尝试,这个方法并不能解决问题。
升级本来就不是一个完美的方案,因为服务器上还是按go1.13编译的
问题是 Xcode Command Lines Tools 升级版本导致
回忆一下从两天前能正常编译,到出问题,中间只做过两个变更:
- 升级系统到Ventura(版本13.0.1)
- 重新安装 Xcode Command Lines Tools
发现有一个Comment描述的是跟我是同样的问题
于是我猜想是 XCode Command Lines Tools 升级后产生了不兼容,尝试恢复旧版本
关于 Xcode Command Lines Tools 的介绍,请参考这篇
深入浅出 Xcode Command Lines Tool - 初探
而下面这篇文章印证了我的猜想
手动恢复旧版 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的网站上搜索并下载旧版本的 XCode,XCode 中会带有对应版本的XCode Command Lines Tools
手动下载,安装到应用程序中,会在 /Application 目录下找到对应的XCode APP
然后用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)
...