1

我正在尝试构建一个包含一些依赖项的纯二进制库。仅二进制库本身的构建非常好,但它实际上并不包含我的依赖项:当我尝试在未安装依赖项的系统上使用该库时,我收到一个错误,说它们丢失了。

作为参考,我用来构建库的命令是:

go build -o build/pkg/<os>_<arch>/<path/to/binary>.a

然后我将我的存根<library>.go文件写入build/src/<path/to/binary>.go.

存根文件包含所有公共方法的存根实现import及其依赖项的块,每个依赖项都包含在该导入块中。

存根文件在指令// go:binary-only-package上方也有一行。package

如果有一种方法可以构建一个包含其依赖项的二进制库,我将不胜感激!

4

1 回答 1

1

如您所知,go 将包编译成单独的存档文件并从中创建二进制文件。Go 最近允许您只提供没有源代码的档案(如果源代码较新,通常 Go 会从源代码重新编译)。

可以将多个档案合并为一个,如下所述:

如何将两个“ar”静态库合并为一个

问题是 Go 的编译器将使用与包名称匹配的文件夹和文件结构来查找符号。因此,如果您合并档案,go 编译器将不再能够在构建二进制文件时定位符号。根据存档的位置,只能找到其中一个包。因此,至少在当前的 go 编译器支持下,不可能按照您的要求进行操作。

于 2018-05-30T21:21:32.917 回答