上下文:有一个repo,它使用GoReleaser tool编译二进制文件和releases编译到GitHub。
如本期所述,标记为v1.32.0
的提交会导致发布动态链接的二进制文件--这没什么:例如,如果您对terraform-provider-confluent_1.32.0_linux_amd64
二进制文件执行download,然后运行file
命令,您将看到"动态链接":
$ file ~/MyDownloads/terraform-provider-confluent_1.32.0_linux_amd64/terraform-provider-confluent_1.32.0
/Users/klinou/MyDownloads/terraform-provider-confluent_1.32.0_linux_amd64/terraform-provider-confluent_1.32.0: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=8SfNWb1Abn_y718BUN-I/PH1ZOJTKh7G-G89wQMVi/7pnMTwFFJzGpJwJM40fD/vwMzK5ZvGUHoFFCvKApk, stripped
我一直在尝试更新. goreelaser config来生成一个静态链接的二进制文件,但问题是当我在本地运行GoReleaser tool时,我甚至不能重现"动态链接"的消息:
x一个一个一个一个x一个一个二个x
最后,对于file
命令,我可以看到statically linked
,而不是dynamically linked
。我应该修复什么(GoReleaser命令?)来重现GoReleaser的"远程"运行以看到dynamically linked
?
更新:https://github.com/zambien/terraform-provider-apigee/issues/48似乎是相关的。
2条答案
按热度按时间hgc7kmma1#
在v1.32.0中,您在
CGO_ENABLED
中有一个拼写错误,因此,实际上,没有为它设置值。https://github.com/confluentinc/terraform-provider-confluent/blob/v1.32.0/.goreleaser.yml#L32
如果您在本地为同一操作系统执行
go build
,而没有为CGO_ENABLED
设置任何值,则二进制文件将被动态链接,如果您为另一个GOOS
构建(比方说,从darwin
设置GOOS=linux
),则它将被静态链接。所以,这与GoReleaser本身没有什么关系,更多的是关于Go语言的工具链和一个打字错误。
回答你的问题,如果你在GoReleaser的配置文件中设置了
CGO_ENABLED=1
,你应该能够在本地复制它,但是我建议你使用--skip-publish
,因为你可能不想每次都重新发布工件。tvmytwxo2#
看起来它与golang有关,与GoReleaser工具没有太大关系。我在运行它
alpine:latest
时设法重现了它: