動的にリンクされた実行可能ファイルをコンパイルするダイナミックリンクライブラリ(共有ライブラリ)を使用してGO

私達は行くが、デフォルトのスタティックリンクライブラリを使用して、さまざまな方法で構築することができる見ることができ、外出先ヘルプbuildmodeを使用しました。

➜SRC buildmode助けに行く構築して行くインストールして行くコマンドは-buildmode引数取る
示しているの種類のオブジェクトファイルに構築することであるが。現在サポートされている値は
以下のとおりです。 -buildmode = アーカイブ
        記載されている以外のビルド - .aというファイルに、メインのパッケージを。名前のパッケージ
        の主は無視されます。-buildmode = C- アーカイブは
        、リストされているメインパッケージに加え、それがインポートすべてのパッケージをビルドする
        Cアーカイブにファイルのみ呼び出し可能なシンボルは、これらのだろう 

    

    
        機能はCGO使用してエクスポート共有// 輸出コメント。必要で
        一覧表示する正確に一つのメインパッケージを。

    -buildmode = C-を共有
        、記載されている主なパッケージに加え、それがインポートすべてのパッケージをビルドする
        C共有ライブラリに。のみ呼び出し可能なシンボルがします
        CGO使用してエクスポートされたそれらの機能も// 輸出のコメントを。
        リストされる正確に一つのメインパッケージが必要です。

    -buildmode = デフォルト
        上場主なパッケージは実行ファイルに組み込まれており、列挙されている - メインパッケージは.aというファイル(デフォルトに組み込まれている
        動作)。

    -buildmode = -
        リストされたすべての非結合し、単一の共有へのメインパッケージを
        でビルドするときに使用されるライブラリ - linkshared 
        オプション。mainという名前のパッケージが無視されます。

    -buildmode = exeファイル
        リストされている主なパッケージと、彼らはにインポートすべてのビルド
        の実行可能ファイルを。主な名前が付けられていないパッケージは無視されます。

    -buildmode = パイは
        、彼らがにインポート記載されている主なパッケージと、すべてのビルド
        位置に依存しない実行ファイル(PIE)を。名前のないパッケージ
        のメインは無視されます。

    -buildmode = プラグイン
        記載されている主なパッケージ、加えて、彼らのすべてのパッケージをビルドします 
        ゴープラグインへのインポート、。主な名前が付けられていないパッケージは無視されます。
GOのbuildmode

我々は共有モードを使用しますが、表示がサポートされていないMacOSで、我々は実験にLinuxプラットフォームを置き換えます:

➜SRC行くインストール -buildmode = 共有yxpkgの 
 -buildmodeを=ダーウィン/ AMD64でサポートされていない共有

libstd.soライブラリの作成:

ルート@ドッキングウィンドウは、〜/#が行く行くインストール -buildmode =共有STDを

ライブラリそうyxpkgパッケージを作成します。

ルート@ドッキングウィンドウ〜/#が行く行くインストール -buildmodeを=共有-linkshared yxpkg

main.go生成された動的にリンクされた実行ファイルをコンパイルします。

〜/グラム/ srcに#が-linkshared yaoxu.goを構築して行くルート@ドッキングウィンドウ

私たちは、以前に生成された静的にリンクされた実行ファイルを比較:、大きく異なり、その実行可能ファイルのサイズを見つけます。

ドッカ〜/グラム/ @ルートSRC#LL 1.9M 
-rwxr-XR-X。1ルートルート22K 8月29  1717 yaoxu * 
-rw-rを- r--の。1つのルートルート    87年08月29  1657 yaoxu.go 
drwxr -XR-X。2ルートルート4 .0K年08月29  1627 yxpkg /
 -rwxr-XR-X。1ルートルート1.9M 8月29  1657 yx_static *

私たちは、lddは2つのファイルを参照して使用されています。

 

 目に見える、二つの文書は、ダイナミック・リンク・ファイルで、ファイルは静的にリンクされています。

これは時間をコンパイル、またはソースコードファイルをコンパイルするために支援を必要と動的にリンクされて行くことに留意すべきである、私が主な理由は、シンボルテーブルを構築することだと思います。

いくつかの具体的な詳細は、あなたが自分自身をテストするために、自分の環境を構成することができますがあります。

次のようにコンパイルされた作業領域のディレクトリ構造は次のとおりです。

 

 ここで、yxpkgパケットを機能するように使用されるパッケージ、yaoxu.goファイルの内容をyxpkg。

ワークエリアコードは、以下の接続で見つけることができます:https://github.com/yaowenxu/Workplace/tree/master/go

更新滞在、参考になりました場合には、注意を払ってくださいcnblogs.com/xuyaowen

 

おすすめ

転載: www.cnblogs.com/xuyaowen/p/go-build-dynamic-lib.html