当前位置: 首页 > 知识库问答 >
问题:

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

斜烈
2023-07-27

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

图片.png

  • https://github.com/kubernetes/minikube
  • https://minikube.sigs.k8s.io/docs/start/

图片.png

只要这样就能安装

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

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

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

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

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

输出如下

╰─➤  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/minikubego: downloading github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95go: downloading github.com/moby/sys/mountinfo v0.6.2go: downloading github.com/VividCortex/ewma v1.2.0go: downloading github.com/hashicorp/go-version v1.6.0

查看能不能用

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

没毛病

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

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

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

直接段错误?为什么?

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

共有2个答案

施慈
2023-07-27

是不是应该使用 make cross

参见:https://github.com/kubernetes/minikube/blob/master/.github/workflows/build.yml#L32

诸超
2023-07-27

解决了,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
 类似资料:
  • 我想直接从我的应用程序运行另一个应用程序(Polaris Office)。但它也应该直接打开PDF文件。 我尝试了以下代码: 知道我该怎么做吗?我当前的代码给出了错误消息: 原因:java。lang.SecurityException:权限拒绝:启动Intent{act=android.Intent.action.MAIN dat=file:///mnt/sdcard/pdf.pdftyp=app

  • 问题内容: 我需要从自己的Java程序中运行其他几个程序,基本上我需要运行这些命令行语句。 和 并且我需要在自己的程序中使用从这些程序写入控制台的文本输出。我已经尝试过使用svn运行Runtime.getRuntime()。exec(),但是它似乎没有做任何事情,因为它没有生成svn.log文件。同样,两个程序都需要在不同的地方调用,svn行需要从一个文件夹内调用,而java行需要从另一文件夹内调

  • 问题内容: 这是我想做的: 运行程序并初始化一些数据结构。 然后,编译可以访问/修改现有数据结构的其他代码。 根据需要重复步骤2。 我希望能够既要做到这一点,并使用(并最终于)类Unix系统(特别是Linux和Mac OS X)。这个想法基本上是为这些语言实现read-eval- print循环,该循环会在输入表达式和语句时对其进行编译,并使用它们来修改现有的数据结构(该操作始终以脚本语言完成)。

  • 扬声器是正常的,没有损坏. 网络上有些视频自带噪音,可以通过下载该视频,并通过音频处理软件处理后,把这些视频变为没有噪音的视频. 但有没有一种软件在音频播放的时候直接降低扬声器播放出来的噪音. 可以理解为,对于扬声器播放的声音,一边播放,一边降低噪音. 个人尝试过电脑自带的声音增强器, dolby audio 但是效果都不好,还是有噪音 所以,求一个功能强大的,但不要求特定声卡的,实时降噪的软件,

  • 问题内容: 命令可以运行已编译的Scala代码吗?如果是这样,我们为什么要使用排他命令? 问题答案: 如果您在类路径中包含了Scala的所有必要运行时库(scala-library.jar,scala-swing.jar …),则可以运行Scala生成的字节代码。scala命令自动执行此操作,并支持特定于Scala的命令行参数。

  • 问题内容: 我需要加密一些已经公开发布的PHP源代码。 这可能吗?可以“编译” PHP吗? 问题答案: 您可以购买Zend Guard来编码您的PHP源代码,然后使用Zend Optimizer 来运行它。也有一个开放源代码/免费的PHP编译器项目(bcompiler,并且也对此进行了介绍),但我从未使用过它,因为当时我需要它时该项目仍不完整。