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

作者站长头像
站长
· 阅读数 21

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

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

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

只要这样就能安装

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 上,我自己编译出来的却只能跑在当前机器上,换个机器就不行了?

回复
1个回答
avatar
test
2024-06-30

解决了,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
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容