【发布时间】:2022-01-17 12:13:02
【问题描述】:
上下文:我正在尝试将 Go 程序(特别是 Markus Kont 的 go-sigma-rule-engine)编译为可执行文件,以便我可以将其上传到 AWS Lambda (which is Amazon Linux 2 under the hood I believe, according to this post.) 并通过 Python Lambda 函数包含/执行它,该函数向规则引擎程序发出 shell/os 命令。
问题:该程序依赖于许多依赖项,并且为了尽可能少地处理问题,我想在上传到 AWS Lambda 之前静态链接程序并编译,以便所有必要的依赖项包含在可执行文件本身中。
问题:我如何静态链接然后在 Go 中编译一个程序,以便我以 AWS Lambda 操作系统为目标?
【问题讨论】:
-
那么如果我在程序的源代码目录中执行
go build .,生成的可执行文件将是完全独立的吗?如果是这样,为什么会有这样的指南:oddcode.daveamit.com/2018/08/16/… 他们只是过时了吗? -
Go 总是输出一个静态链接的二进制 AFAIK,其中包括你用 Go 编写的所有模块。但是,该程序仍然依赖于动态链接的 C 库。在大多数情况下,这应该不是问题(因为 Go 所依赖的 C 库包含在目标操作系统中),除非您通过 CGO 使用自己的 C 库。在您所指的链接中,作者也在谈论静态链接这些 C 库。
-
那么我将使用什么命令来定位 Amazon Linux 2 操作系统并构建可执行文件?
-
假设您的应用程序没有第三方 cgo 依赖项,Go 可执行文件应使用 Amazon Linux 2 操作系统上的默认包运行。使用这个命令:
GOOS=linux go build.
标签: amazon-web-services go aws-lambda compilation static-linking