【问题标题】:Build application for Ubuntu 18 from Ubuntu 20从 Ubuntu 20 为 Ubuntu 18 构建应用程序
【发布时间】:2020-07-30 10:31:12
【问题描述】:

我在我的 Ubuntu 20.04 操作系统中使用 go build -o myApp 构建我的 Go 应用程序。

当我在 Ubuntu Server 18.04 上运行此应用程序时,出现此错误:

/lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ./myApp)

当我在 stackoverflow 中搜索时,有人提到在服务器上安装 glibc 2.29。但是有人回答说这种方式有风险,可能会破坏操作系统。

其他人建议使用glibc 2.27 构建应用程序。

我该怎么做?

【问题讨论】:

  • 安装 Docker,并在 Ubuntu 18 容器中构建?
  • @tripleee 没有更简单的选择吗?我不知道码头工人。

标签: linux ubuntu go glibc cgo


【解决方案1】:

如何制作静态二进制文件主要取决于您的代码(或库)是否使用 cgo。

如果不需要cgo,这相当简单:只需使用环境变量将其禁用:CGO_ENABLED。这将自动切换一些基于 cgo 的功能以使用纯 go 实现(netgoosusergo):

CGO_ENABLED=0 go build -o myApp

如果需要cgo,你可以告诉链接器静态链接C代码:

go build -ldflags="-extldflags=-static" -o myApp

请注意,并非所有 cgo 代码都会对此感到满意。如何解决它取决于使用的库。

【讨论】:

  • 谢谢。不幸的是,我的项目有需要 CGO 的“webp”库。所以我不能使用这种方法。
  • 好的,我已经为我的答案添加了cgo required 解决方案。请试一试。我也调整了非cgo的答案,只需要环境变量。
  • 如果没有编译错误,应该没问题。
  • 如果没有恐慌消息以及可能的跟踪和一些代码,很难说出原因。不过,这可能会成为一个单独的问题。
  • 您正在查看所有 goroutine 的列表。你想要恐慌消息和列出的第一个 goroutine。我建议您使用调试详细信息和代码打开一个单独的问题。
猜你喜欢
  • 2021-08-15
  • 2012-01-15
  • 2017-08-30
  • 2021-01-04
  • 2016-11-07
  • 1970-01-01
  • 2019-05-23
  • 2015-12-18
  • 1970-01-01
相关资源
最近更新 更多