2013-03-21 11 views
17

GO標準ライブラリでは、ソースファイルが私の囲碁インストールの下にあります。Goの.aファイルとは何ですか?

C:\Go\src\pkg 

パッケージはソースフォルダの下ここにファイルを.Aに対応:

C:\Go\pkg\windows_amd64 

.Aは何ですかファイル?彼らは何のために使用され、どのように生成されます。私が気付いたのは、私がgo get libraryhostedingithubのときに自動的に生成されるということです。 docsによると

答えて

19

コンパイル済みのパッケージです。 import foo/barを書くときに参照しているファイルです。それは$GOROOT/pkg/$GOOS_$GOARCH/foo/bar.aを指し、$GOROOT/src/foo/bar/*.goを指しません。

これらのファイルには、デバッグシンボルとソース情報とともに、コンパイルされたパッケージバイナリコードが含まれています。

+0

純粋にコンパイルされたパッケージ形式でライブラリを配布することは可能ですか?私はどこかから読んだことを覚えています.Goでライブラリをソースファイルで配布することしかできません。 – Dante

+4

原則として、そうすることができます。しかし、特定のプラットフォーム用にコンパイルされていることに注意してください。したがって、あるプラットフォーム用のパッケージを別のプラットフォームを対象としたビルドサイクルに正常にインポートすることはできません。結局、ソース配布は面倒ではありません。 – jimt

+1

@ JohnNevermore現在、ソースなしのビルドは可能ではありますが、サポートされていません。必要な情報はすべてライブラリファイル(.a)に含まれています。 – fuz

4

DIRが行くパスに記載されているディレクトリである場合は、DIR/SRC/fooの/バーにソースとパッケージは「FOO /バー」としてインポートし、そのを持ってすることができます"DIR/pkg/GOOS_GOARCH/foo/bar.a"にインストールされたコンパイル済みのフォーム(または、gccgoの場合は "DIR/pkg/gccgo/foo/libbar.a")。

コンパイルされた/インストールされたパッケージのようです。

4

go .aパッケージオブジェクトのアーカイブファイルは、go tool packコマンド:Command packによって作成されます。

2

@.aパッケージオブジェクトアーカイブファイルは、go tool packコマンド:Command packによって作成されました。 "

しかし、さらに明確にするために、あなたはこれらのファイルをコピーして.tar.gzに拡張子の名前を変更し、Linux7zipまたはtar -xvfコマンドのようなプログラムでは、通常の圧縮されたtarイメージとしてそれらを開くか、go tool packを使用することができますすることができます事実上同じです。

コンパイル済みオブジェクトファイル ".o"には、コンパイルされたコードとデバッグシンボルが含まれています。パッケージ定義ファイル(__。PKGDEF)にはパッケージメタデータが含まれています。

関連する問題