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

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循环,该循环会在输入表达式和语句时对其进行编译,并使用它们来修改现有的数据结构(该操作始终以脚本语言完成)。

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

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

  • 问题内容: 如何编译和运行以下程序: Test1.java: Test2.java: 我是新手。如果我使用编译 并手动创建目录A,则将Test1.class复制到其中,然后手动创建目录B,并将Test2.class复制到其中,然后运行它。我确信这不是正确的方法。请提出建议。 问题答案: 您需要将Java文件保留在正确的目录结构中: 通常仅在您的主类上调用就足够了,因为所有依赖项都将自动处理。我说了