copying …: open /usr/local/go/pkg/darwin_amd64/runtime/cgo.a: permission denied

小白,Macos下Goland-go build配置运行项目,发生如下错误:

GOROOT=/usr/local/go #gosetup
GOPATH=/Users/zhaoheng/GO #gosetup
/usr/local/go/bin/go build -i -o /Users/xxx/Desktop/work/go/xxx/bin/test/run_test xxx/cmd/test #gosetup
go build runtime/cgo: copying /Users/xxx/Library/Caches/go-build/c9/c98ec99950f6a719f87ae12ba24830893366a8e8b6fde1fe2e8cf8721f80e922-d: open /usr/local/go/pkg/darwin_amd64/runtime/cgo.a: permission denied

Compilation finished with exit code 1

处理过程记录:

  • 同样的go build配置,调试状态启动正常。直接命令行go build,go run可以正常启动
  • 在网络上找到的大概有三条,
  1. 目录权限问题,给日志中的路径加权限,eg:sudo chmod -R 777 xxx ###无效
  2. 取消go build配置中的 Run with Sudo ###无效
  3. 禁用CGO,添加环境变量 export CGO_ENABLED=0 ###无效
  • 思考下:
           既不是权限问题,不是cgo问题,debug又能正常启动,那就只剩下一种可能,run和debug的启动参数不同,于是注意到日志中有 /usr/local/go/bin/go build -i -o 两个运行参数。-o不提,go help build
    得到:

    The -i flag installs the packages that are dependencies of the target.

    安装作为目标依赖项的包。再根据日志基本确定是从系统目录拷贝cgo.a到运行时产生的中间目录时权限不足导致的。

实际上是用于增量编译,缓存一些依赖库到build中间目录,其中就包括cgo.a,这个文件对于非root用户是readOnly权限,但build错误日志中却要open该文件,所以权限不足。

解决:

  • 方法一:取消掉go build -i
    在这里插入图片描述
  • 方法二:添加权限

sudo chown -R /usr/local/go/pkg/darwin_amd64/

项目不大,且golang编译速度很快,还是方法一取消增量编译更安全方便

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值