4

Go で C ライブラリの Go ラッパーを作成しています。問題は、C ライブラリが多くの Linux ディストリビューションで利用できないことです。そのため、「github.com/me/mylibrary を入手する」ために誰もライブラリをインストールする必要がないソリューションが必要です。

1 つの解決策は、ライブラリのソースをサブ ディレクトリに追加することです。次に、私のプロジェクトが go get でビルドされるときに、このライブラリも自動的にビルドする必要があります。しかし、これを自動化する方法がわかりません。

または、ソースをダウンロードし、抽出してビルドするスクリプトを作成することもできます

しかし、これらのビルドステップを go build ツールに接続する方法がわかりません。

静的ライブラリをリンクするのも簡単ではありません。

#cgo linux LDFLAGS: ./MyLib/lib/libMyLib.a -lstdc++ -lm -lX11

ライブラリからビルドしている限りは機能しますが、別のプロジェクトからビルドしたい場合、相対パスはライブラリからではなくそのプロジェクトからのものであるため、失敗します。

4

1 に答える 1

0

http://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_commandに従って

Go ツールは、1 つ以上の Go ファイルが特別なインポート "C" を使用していることを確認すると、ディレクトリ内の他の非 Go ファイルを探し、それらを Go パッケージの一部としてコンパイルします。.c、.s、または .S ファイルは、C コンパイラでコンパイルされます。.cc、.cpp、または .cxx ファイルは、C++ コンパイラでコンパイルされます。

したがって、C ライブラリ ソースをリポジトリに含めると、go が自動的にビルドします。このページでは、ビルド フラグをコンパイラに渡す方法や、おそらく知っておく必要のあるその他のことについても説明しています。

于 2014-04-17T22:55:34.930 に答える