首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用存档/tar时无法编译

使用存档/tar时无法编译
EN

Stack Overflow用户
提问于 2022-01-28 20:34:08
回答 1查看 70关注 0票数 1

我正试图在我的Golang项目中使用archive/tar。但是,当我编译它时,我会得到以下错误:

代码语言:javascript
复制
/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容器中编译我的项目:

代码语言:javascript
复制
go build -ldflags "-d -X main.Something=$SOMETHING -X main.Another=$ANOTHER -linkmode external -extldflags -static" -tags netgo -o prog cmd/prog/*.go

没有导入,一切都编译得很好。要触发这一点,我所需要做的就是:

代码语言:javascript
复制
import (
    archive/tar
    ...
)
...

func someFunc() {
    ...
    tarWriter := tar.NewWriter(file)
    defer tarWriter.Close()
}

考虑到程序的要求,允许动态链接不是我能做的事情。我怎么才能让这个静态链接?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-28 21:48:46

与其使用-ldflags来避免程序被动态链接,您可以通过以下环境禁用它:

代码语言:javascript
复制
CGO_ENABLED=0 go build -ldflags "-X main.Something=$SOMETHING -X main.Another=$ANOTHER" -o prog $PACKAGE_PATH

例如,这个最小的(恐慌)程序:

代码语言:javascript
复制
package main

import (
    "archive/tar"
)

func main() {
    tarWriter := tar.NewWriter(nil)
    defer tarWriter.Close()
}

完美地编译了:

代码语言:javascript
复制
CGO_ENABLED=0  go build -o prog .
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70899991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档