我正在尝试构建一个包含一些依赖项的仅二进制库。仅二进制库本身的构建很好,但它实际上并不包含我的依赖项:当我尝试在没有安装依赖项的系统上使用库时,我会收到一条错误消息,说它们已丢失。
作为参考,我用来构建库的命令是:
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
行。
如果有办法构建一个包含其依赖项的二进制库,我会很感激!
答案 0 :(得分:1)
如您所知,将包编译到单个存档文件中并从中创建二进制文件。 Go最近允许您只提供没有源代码的存档(如果源代码较新,通常会从源代码重新编译)。
可以将多个档案合并为一个档案,如下所述:
How to merge two "ar" static libraries into one
问题是go的编译器会使用与包名匹配的文件夹和文件结构来查找符号。因此,如果组合归档,go编译器将无法再在构建二进制文件时找到符号。根据存档的位置,只能找到其中一个包。因此,至少在当前的编译器支持下,不可能完成您的请求。