我正在尝试构建一个Go程序,我的系统上有二进制形式的必需库。但是,go build
失败并显示
object is [linux amd64 go1.1.1 X:none] expected [linux amd64 go1.1.2 X:none]
我看到了当前的问题:静态库是使用较旧版本的Go构建的。如何直接从.a
文件中读取该信息? (我可以用strings library.a | grep '^go object'
看到它,但是有什么意味着输出构建字符串吗?(并且,该字符串被正确调用了什么?)
答案 0 :(得分:1)
Go编译器生成的.a
文件使用pack
工具进行管理。用于链接包的元数据位于存档的__.PKGDEF
成员中。
您可以使用以下内容将此文件从存档中提取到stdout
go tool pack p path/to/package.a __.PKGDEF
它从您之后的构建签名开始,因此您可以使用^go object
的第一行或grep来获取strings
的输出(这应该更可靠一点,如果文本在程序代码中显示为常量。)