问题标签 [go-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
13000 浏览

docker - docker multi-stage build Go image - x509:由未知权威签署的证书

我尝试使用私有公司网络中构建图像:

并得到x509: certificate signed by unknown authority错误

我试图在

X509:由未知机构签署的证书(在 Docker 容器中运行 Go 应用程序)

docker build:无法获取 github 公共存储库,x509:证书由未知机构签名

未知权威签署的 x509 证书 - go-pingdom

,但结果是一样的。


❗️如果加-insecureflag

Dockerfile unrecognized import path错误包装先前的x509错误和无法访问的 包更改为golang.org/x/crypto

有什么问题❓</p>

(我知道问题出在git获取依赖项时的证书和身份验证中,但我尝试使构建图像的过程更常见)

0 投票
1 回答
100 浏览

go - 如何修复 go build 错误“reflect.typedmemclr not defined”?

我试图在 docker 容器中为 centOS 构建一个 go 二进制文件,它给出了以下错误:

# command-line-arguments

github.com/ugorji/go/codec.rvSetDirect: relocation target reflect.typedmemclr not defined

github.com/ugorji/go/codec.rvSetDirectZero: relocation target reflect.typedmemclr not defined

我也试过go build-x,没有看到任何与损坏的安装相关的东西,但由于上述错误,构建仍然不成功。

0 投票
1 回答
373 浏览

go - build, buildmode=c 不给头文件

我正在尝试使用 build flag 构建一个 Go 包-buildmode=c-shared。我期望得到两个文件myfile.somyfile.h. 但是,我只得到.so文件。为什么会这样,我该如何解决?

我正在运行的完整命令是:

go build -o myfile.so -buildmode=c-shared myfile.go

当我计划从 Python调用时,我在这里找到了我的“说明” 。myfile

这是我的围棋代码:

这是我的代码的基本摘要,没有发布我的整个代码。但是,请注意运行上面链接中的示例会创建一个.so.h文件。

0 投票
0 回答
104 浏览

go - 如何将 Go 可执行文件与 Windows 上的 Go 编译库静态链接?

假设我有一个包main,它导入了另外两个包pkg1pkg2. pkg1并且pkg2不是可执行包,它们是库包。假设pkg1pkg2非常大,在不同的存储库中维护,我想将它们分别编译成两个.a二进制文件。这似乎是可能的

当我想编译我的main包时,我想导入这两个.a二进制文件并静态链接它们以获得单个可执行文件。我们如何在Windows上做到这一点?像这样的东西:

请注意,我不想使用 C API(通过构建 a.dll并将其与 Cgo 一起使用),而是使用 Go API。这意味着我想充分受益于 Go 的功能(类型安全、垃圾收集等)。我也想在Windows上执行此操作,该操作系统目前不支持-buildmode=shared或 Go 插件。我不在乎它是否涉及低级命令和黑魔法。

现在,我知道这不完全是“Go way”。go build自动为我们处理依赖关系并且非常擅长。但是我想知道这是否可能以及如何做到这一点,因为在构建大型二进制文件或出于 IP 原因将已编译的库发送给客户时,这可能是业务需求。

作为第二个问题,如果我想做的事情是可能的,那么生成的可执行文件最终是否会包含相同编译依赖项的多个实例(因此使可执行文件比必要的大)?在这种情况下,有没有办法确保生成的可执行文件将包含每个已编译依赖项的一个实例?

0 投票
0 回答
51 浏览

go - 使用所需模块的旧版本编译 go 源代码

我试图构建一个go需要的源代码,go-systemd我在源包中看到go.mod 文件go-systemd中也提到了该版本。github.com/coreos/go-systemd/v22 v22.0.0但是当我运行go get -u源代码时。它失败并出现错误,我看到在v22.2.0.

我应该如何使用以前没有此代码的版本来避免此错误?我正在go version 1.16使用centos7

提前致谢。

0 投票
2 回答
176 浏览

go - 使用特定版本的 golang 依赖模块

我正在尝试从github 链接构建 postfix-exporter 代码。它依赖于文件go-systemd中提到的包。我在文件中看到,提到的包版本是 但是当我为此路径运行时,它开始下载最新版本(),该版本在最新提交中存在问题并导致编译失败。进来的错误是go.modgithub.com/coreos/go-systemd/v22 v22.0.0go.modv22.0.0.go get -uv22.2.0go-systemd

我想知道,如果不是这样,或者我缺少一些选项来尊重中提到的依赖包的版本,如何编译任何依赖模块的特定版本go.mod

提前非常感谢,请原谅我的golang知识。

0 投票
1 回答
67 浏览

go - 在未连接到 Internet 的 linux 机器上编译 Golang

由于公司政策,我们有一个未连接到 Internet 的 CI/CD 服务器。

我想在这个服务器上运行单元测试。

我被允许 WinScp 文件给它。为了让它工作,我想我将从我的源 Windows 机器上的所有文件通过 FTP 文件进行编译,本质上是从 GOPATH 目录中复制所有文件。

但是我仍然会出错,例如我实际上有这个文件 /export/home/teamcity/go/src/github.com/jinzhu/copier@v0.0.0-20190924061706-b57f9002281a

Gopath 设置 [17:40:40][步骤 1/1] GOPATH="/export/home/teamcity/go"

但是 CI/CD 构建给出了这个错误

[步骤1/1] 去:github.com/jinzhu/copier@v0.0.0-20190924061706-b57f9002281a: git fetch -f https://github.com/jinzhu/copier refs/heads/ :refs/heads/ refs/ tags/ :refs/tags/ in /export/home/teamcity/go/pkg/mod/cache/vcs/556feec929544a421f03ed1922f1d1bfffe10a3eaaf694889bbdbe940ff02899:退出状态128:[17:40:41] [步骤1/1]致命:无法访问' https://github.com/jinzhu/copier/':无法解析主机:github.com;名称或服务未知

有没有人在没有连接到 Internet 的服务器上编译 Golang 代码的经验?

0 投票
1 回答
4007 浏览

go - `//go:build` 和 `// +build` 指令有什么区别?

例如,https ://github.com/golang/sys/blob/master/cpu/cpu_gccgo_x86.go#L5 :

在我看来,作为构建标签,// +build ... 可以很好地工作。
为什么//go:build仍然明确指定?

顺便说一句,很难找到手册//go:build,但// +build很容易(https://pkg.go.dev/cmd/go#hdr-Build_constraints

0 投票
1 回答
147 浏览

go - CGo 不编译 C 文件

我有一个非常简单的设置:一个 .go 文件(test.go)和一个 .c 文件(PMDK.c)。我在 Go 中包含 .c 文件,如下所示:

测试.go

当我运行go run test.go时,它只构建一次。无论我对PMDK.c做什么更改,我的程序每次都具有完全相同的行为。

我还尝试了 go build test.go,这导致了相同的结果。最后,在CGo 不编译同一目录中的 C 文件之后,我只是去构建。这不起作用,因为我必须创建一个 .mod 文件(go build test.go)。然后,问题是PMDK.c中的三个函数(helloWorld和另外两个)据说被定义了多次。我不能让它建立我的改变。顺便说一句,如果我将源文件复制/移动到另一个目录并在那里构建它们,则更改将适用(仅一次,再次)。

0 投票
2 回答
233 浏览

go - 如何在 M1 (arm64) Mac 上编译使用 C 的 amd64 二进制文件

GOARCH当设置为arm64(或省略)时,我的应用程序编译良好。但是,当我尝试编译 amd64 二进制文件 ( GOOS=darwin GOARCH=amd64 go build) 时,我收到以下错误:

[internalPackageThatUsesC]由 3 个文件组成——一个带有实现的 Objective C 文件、一个头文件和一个为本地代码提供接口的 Go 文件。以下是 Go 文件:

带有注释的名称[]意味着它们是实际名称的占位符。

我试图运行它,arch -x86_64但输出是相同的。

这里有什么问题?我需要添加另一个构建标签吗?

PS 我在 StackOverflow 上发现了关于这个错误的问题,但没有一个是关于为 amd64 编译的。这个问题是最接近的,但它是特定于 WebAssembly 的。

以下是结果go env