我正试图在我的Golang项目中使用archive/tar。但是,当我编译它时,我会得到以下错误:
/usr/local/go/pkg/tool/linux_amd64/link: /go-cache/10/1020ddd253c007d4f0bbed6c73d75297ac475bbc40d485e357efc1e7584bc24f-d(_go_.o): cannot use dynamic imports with -d flag
/usr/local/go/pkg/tool/linux_amd64/link: /go-cache/73/735aa16c44473681079e1f6b4a517de41fcac801aa803f5f84f6ebcb6436f3e6-d(_go_.o): cannot use dynamic imports with -d flag下面是如何在golang:1.17-alpine3.14 Docker容器中编译我的项目:
go build -ldflags "-d -X main.Something=$SOMETHING -X main.Another=$ANOTHER -linkmode external -extldflags -static" -tags netgo -o prog cmd/prog/*.go没有导入,一切都编译得很好。要触发这一点,我所需要做的就是:
import (
archive/tar
...
)
...
func someFunc() {
...
tarWriter := tar.NewWriter(file)
defer tarWriter.Close()
}考虑到程序的要求,允许动态链接不是我能做的事情。我怎么才能让这个静态链接?
发布于 2022-01-28 21:48:46
与其使用-ldflags来避免程序被动态链接,您可以通过以下环境禁用它:
CGO_ENABLED=0 go build -ldflags "-X main.Something=$SOMETHING -X main.Another=$ANOTHER" -o prog $PACKAGE_PATH例如,这个最小的(恐慌)程序:
package main
import (
"archive/tar"
)
func main() {
tarWriter := tar.NewWriter(nil)
defer tarWriter.Close()
}完美地编译了:
CGO_ENABLED=0 go build -o prog .https://stackoverflow.com/questions/70899991
复制相似问题