仅二进制库不包含依赖项

时间:2018-05-30 21:00:06

标签: go

我正在尝试构建一个包含一些依赖项的仅二进制库。仅二进制库本身的构建很好,但它实际上并不包含我的依赖项:当我尝试在没有安装依赖项的系统上使用库时,我会收到一条错误消息,说它们已丢失。

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

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行。

如果有办法构建一个包含其依赖项的二进制库,我会很感激!

1 个答案:

答案 0 :(得分:1)

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

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

How to merge two "ar" static libraries into one

问题是go的编译器会使用与包名匹配的文件夹和文件结构来查找符号。因此,如果组合归档,go编译器将无法再在构建二进制文件时找到符号。根据存档的位置,只能找到其中一个包。因此,至少在当前的编译器支持下,不可能完成您的请求。