外部ライブラリにリンクする場合は、ターゲット アーキテクチャ用に個別にコンパイルする必要があります。ライブラリをコンパイルするために/ (またはその他cgo
のもの) を置き換えることはできません。パッケージ ディレクトリ内のいくつかのファイルをビルドする方法しか認識していないため、ライブラリのビルド プロセスはより複雑になる可能性があります。configure
make
.c
クロスコンパイル時に外部ライブラリにリンクするというより大きなタスクを達成する方法がよくわかりません(そして、あなたがすでに何をしたのかわかりません)。クロスコンパイルに関する (クローズされた) Go バグは、cgo
ここで役に立ちます。で説明されているいくつかの環境変数セットを使用して、Go ツールチェーンをビルドすることができますgodoc cmd/cgo
。
ビルドのクロス コンパイル中に cgo を有効にするには、make.bash を使用して Go ツールをビルドするときに CGO_ENABLED 環境変数を 1 に設定します。また、CC_FOR_TARGET をターゲットの C クロスコンパイラに設定します。CC は、ホスト用のコンパイルに使用されます。
Go ツールがビルドされた後、go コマンドを実行すると、CC_FOR_TARGET は無視されます。make.bash を実行するときの CC_FOR_TARGET の値は、デフォルトのコンパイラです。ただし、go ツールの実行時にコンパイラを制御するために、CC_FOR_TARGET ではなく、環境変数 CC を設定できます。
CXX_FOR_TARGET は、C++ コードに対して同様に機能します。
このバグには、使用している誰か-ldflags="-extld=$(CC)"
($(CC)
は使用したいクロスコンパイラーの名前) についても言及されています。
あなたのサンプルコードには明示的なものがありますが-L/usr/local/lib
、それはうまくいかないと思います.ターゲット用のライブラリを構築するときはlib
、ホストアーキテクチャ用とは別のディレクトリにそれらを置きたいと思うでしょう. たとえば、この ARM クロスコンパイル HOWTO では、/usr/local/arm-linux
いくつかの場所でプレフィックスまたは install_root を使用しています。