从 Ubuntu 20 构建 Ubuntu 18 的应用程序

Build application for Ubuntu 18 from Ubuntu 20

我在 Ubuntu 20.04 OS 中使用 go build -o myApp.

构建了我的 Go 应用程序

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

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

当我在 Whosebug 中搜索时,有人提到在服务器上安装 glibc 2.29。但是有人回复说这种方式有风险,可能会断OS.

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

我该怎么做?

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

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

CGO_ENABLED=0 go build -o myApp

如果需要 cgo,您可以告诉 linker 静态地 link C 代码如下:

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

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