golang 编译出来的程序,可以直接放到其他电脑运行吗?

最近在使用 minikube,这玩意用 go 写的

图片.png

图片.png

只要这样就能安装

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

当然,这个是已经编译好的二进制发行版

我想从源码自己编译安装一个玩玩(学习)

然后,我打算在 机器 A 上编译(ubuntu20.04 x86-64)

git clone git@github.com:kubernetes/minikube.git
make

输出如下

╰─➤  make                                                                                                                          2 ↵
go build  -tags "" -ldflags="-X k8s.io/minikube/pkg/version.version=v1.31.1 -X k8s.io/minikube/pkg/version.isoVersion=v1.31.0 -X k8s.io/minikube/pkg/version.gitCommitID="747495cfea7e72001c07d76ac9472837993e7efc" -X k8s.io/minikube/pkg/version.storageProvisionerVersion=v5" -o out/minikube k8s.io/minikube/cmd/minikube
go: downloading github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95
go: downloading github.com/moby/sys/mountinfo v0.6.2
go: downloading github.com/VividCortex/ewma v1.2.0
go: downloading github.com/hashicorp/go-version v1.6.0

查看能不能用

╰─➤  ./out/minikube version
minikube version: v1.31.1
commit: 747495cfea7e72001c07d76ac9472837993e7efc

没毛病

然后我把这个源码编译出来的 minikube 复制到另一个机器B (ubuntu22.04 x86-64)

但是在机器 B 上缺无法运行

➤  ./minikube                                                                                                                                                                                                                                                                                        1 ↵
[1]    1543533 segmentation fault  ./minikube

直接段错误?为什么?

为什么官方发型的那个可以跑在任何 x64 的 linux 上,我自己编译出来的却只能跑在当前机器上,换个机器就不行了?

阅读 2.9k
2 个回答

解决了,chatGPT 告诉我的

让我添加 CGO_ENABLED=0 就好了

试了一下,确实 ok 了

CGO_ENABLED=0 go build -tags "" -ldflags="-w -s -X k8s.io/minikube/pkg/version.version=v1.31.1 -X k8s.io/minikube/pkg/version.isoVersion=v1.31.0 -X k8s.io/minikube/pkg/version.gitCommitID=747495cfea7e72001c07d76ac9472837993e7efc -X k8s.io/minikube/pkg/version.storageProvisionerVersion=v5" -o out/minikube k8s.io/minikube/cmd/minikube

-ldflags 是可选的,加不加不影响能不能跑

所以,最小化可以这样

CGO_ENABLED=0 go build -tags "" -o out/minikube k8s.io/minikube/cmd/minikube
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏