1

システムに必要なライブラリがバイナリ形式である 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'ためのものはありますか? (そして、その文字列は適切に何と呼ばれていますか?)

4

1 に答える 1

1

.aGo コンパイラが生成するファイルは、ツールを使用して管理されますpack。パッケージのリンクに使用されるメタデータ__.PKGDEFは、アーカイブのメンバーにあります。

このファイルをアーカイブから次のように抽出できますstdout

go tool pack p path/to/package.a __.PKGDEF

それはあなたが求めているビルド署名から始まるので、最初の行を取得するか^go object、出力の場合と同じようにgrep することができますstrings(テキストがプログラムで定数として表示される場合、これはもう少し信頼性が高くなるはずです)コード)。

于 2013-09-22T15:18:21.960 に答える