博客
关于我
Mac M1原生(ARM64)Golang dev&debug
阅读量:432 次
发布时间:2019-03-06

本文共 2295 字,大约阅读时间需要 7 分钟。

 2021-5-1 补充更新:

最新更新的 MacOS 11.3 (20E232) 上,也遇到了这个情况,go版本是 go 1.16.4.

解决方案:
下载最新版本源代码,对dlv进行重新编译打包:

git clone https://github.com/go-delve/delve.git cd delve/cmd/dlv/ go build go install

一般安装目录会在你的go安装目录上,或者是你的GOPATH/bin中,然后在Goland中点击: Help → Edit Custom Properties...

dlv.path=/usr/local/bin/dlv

保存重启,解决step over(F8) 直接运行DEBUG.

前言

通过本文最终实现了在M1芯片的Mac mini上的Goland的开发,并通过编译源码解决了无法DEBUG的问题。

Go 1.16版将正式支持Apple Silicon M1芯片,即arm64架构的Mac操作系统,目前go 1.16版版本为beta1,只是会在这个基础上再修修bug,改进文档等。

目前我测试M1 ARM64在编译性能上也超过了我的macbook pro 15的i9处理器,而且他还不发热,在晚上写代码的时候总能听到头上灯的电流声,太安静了有些不适应:)

 

本文软硬件环境:

设备:Mac Mini M1 8G/256G 

Go版本:  1.16.4

final happy coding :)   

 

正文

目前有两种方式抢先体验Go1.16:

方式一:编译源代码   

MacOS需要确保安装有 rosetta 2 (https://support.apple.com/en-us/HT211861)。

当然Mac上还需要安装一些工具链:如果MacOS在升级更新后会出现其它问题比如:xcrun: error: invalid active developer path, missing xcrun

同样使用下面命令可以解决:

 

xcode-select --install sudo xcode-select -switch /

 

安装Go1.15,从1.4开发Go的编译器需要Go本身来编译Go,那么为了编译1.16,我们首先需要amd64版本的Go1.15。

 

mkdir $HOME/goroots cd $HOME/goroots wget https://dl.google.com/go/go1.15.6.darwin-amd64.tar.gz tar xzf go1.15.6.darwin-amd64.tar.gz

 

获取Go的最新源代码,clone出来之后目前master分支便是 1.16 的预发布分支。

 

cd $HOME/goroots git clone https://go.googlesource.com/go gosource

 

要编译go的话,需要先预编译 bootstrap 响应的工具链,这个工具链本身也是需要是arm64版,不然最后make出来的还会是x86。

 

cd $HOME/goroots/gosource/src arch --x86_64 env GOROOT_BOOTSTRAP=$HOME/goroots/go GODEBUG=asyncpreemptoff=1 GOOS=darwin GOARCH=arm64 ./bootstrap.bash

 

注意上面的编译环境变量参数中有 GODEBUG=asyncpreemptoff=1 ,这是因为我们的go 1.15是amd64版,直接在m1 mac中运行时需要依赖 rosetta 2,而目前似乎rosetta 2对于go的协程异步抢占还有bug,因此需要关闭;否则编译时会死锁并出现错误:

rosetta error: ulock_wait failure: 105

完成这步后,我们便可在 $HOME/goroots/go-darwin-arm64-bootstrap 路径下获得编译完整go的arm64工具链。

 

最后一步编译arm64原生go

 

cd $HOME/goroots/gosource/src arch --arm64e env GOROOT_BOOTSTRAP=$HOME/goroots/go-darwin-arm64-bootstrap ./make.bash export PATH="$PATH:$HOME/goroots/gosource/bin/"

 

之后就可以正常使用了。

方式二:下载Go1.16beta1

下载安装后可以直接使用:

 

go version go1.16beta1 darwin/arm64 

开发工具

目前Goland正式版已经开发支持Mac M1的开发。

但是目前Goland的工具链还不能正常的进行DEBUG。

编译DEBUG delve工具链

git clone https://github.com/oxisto/delve.git git checkout -b darwin-arm64-lldb cd delve/cmd/dlv/ go build go install cd $GOPATH cp dlv/Applications/GoLand.app/Contents/plugins/go/lib/dlv/Mac/dlv 

 

将delve进行arm64的编译后,覆盖Goland上的版本,就可以使用了。

 

ok ,如上我们终于又可以在M1上编写和调试我们的框架代码了 。

转载地址:http://gnmyz.baihongyu.com/

你可能感兴趣的文章
12.Linux之输入子系统分析(详解)
查看>>
19.QT-事件发送函数sendEvent()、postEvent()
查看>>
MyBatis 面试题
查看>>
源码解析之 Mybatis 对 Integer 参数做了什么手脚?
查看>>
oracle使用DBMS_RANDOM包生成随机数据
查看>>
[转]收集Oracle UNDO诊断信息脚本
查看>>
Qt快速入门之三:Qt项目建立、编译、运行和源码详解
查看>>
【QML 快速入门】属性(Properties)
查看>>
音视频基础知识---像素格式YUV(转)
查看>>
音视频-测试工具推荐
查看>>
C++9018:2333/2235——柠檬汽水(Lemonade Line)
查看>>
力扣 - 430. 扁平化多级双向链表
查看>>
过滤器和监听器总结
查看>>
MinIO分布式集群的扩展方案及实现
查看>>
《深度探索C++对象模型》第二章 | 构造函数语意学
查看>>
C++高精度模板
查看>>
错题重错之WYT的刷子 单调队列
查看>>
洛谷 P2403 [SDOI2010]所驼门王的宝藏 题解
查看>>
关于结构体的初始化
查看>>
洛谷 P6851 【onu】贪心
查看>>