Gentooで静的にリンクされたバイナリを作成する

Gentooで静的にリンクされたバイナリを作成する

私はGentooで完全に静的にリンクされたバイナリを作成する方法を探しています。

ビルドシステムはMesonです。私は試しましたが--prefer-static成功--default_library=staticしませんでした。

1つの可能な障害は、一部のライブラリ(たとえば、libeventおよびglib)に静的バージョンがインストールされていないことです(libc他のライブラリとは異なり)。emerge特別なフラグを使用して再実行する必要がありますか?

答え1

該当するすべてのパッケージの静的リンクのサポート

--staticより安全なアプローチは、Gentoo専用ライブラリで必要なライブラリをコンパイルするよりもシステム全体を静的にすることです。static-libsあなたがいるようにオンラインパッケージリポジトリ、多くのソフトウェアパッケージがstaticUSEフラグをサポートしています。

静的接続とは何ですか?

静的リンクは、ユーザーが特定のアプリケーションライブラリにアクセスできない組み込みシステムまたはデバイスのプログラムに役立ちます。 Windowsベースのシステムでは、これらのライブラリは通常、拡張子.DLL(略語)を持つファイルとして保存されますDynamic Linking Library。 Linuxでは、これらのライブラリは通常、拡張子または.so.so.versionNumberOfProgramThatUsesLibrary 共有オブジェクトの略)ファイルとして保存されます。静的にコンパイルされると、上記のライブラリファイルはコンパイルされたプログラムと共に提供されるため、ユーザーは完全な書き込みアクセス権を持つホームディレクトリに完成したプログラムをコピーでき、プログラムは同じライブラリの代わりにそのホームディレクトリのライブラリファイルを使用します。ファイル 。ユーザーがアクセスできないホストシステムのライブラリ。静的接続と動的接続の詳細については、次を参照してください。静的ライブラリと動的(共有)ライブラリリンクの違いは何ですか?

警告に注意する

Gentooの最初の年に、ユーザーはさまざまな段階のタ​​ールボールでシステムを構築することができました。バラよりGentoo Wikiのステージタールボール。。警告の内容は次のとおりです。

起動中にこれを設定しないでください!バイナリが動的にリンクされるのではなく静的にリンクされるようにします。

最初のステップに適用されます。避けるために存在する鶏が先か、卵が先か?。静的ライブラリーを使用して静的ライブラリー・ファイルをビルドできないため、静的ライブラリーを使用するプログラムまたはライブラリーがないプログラムにはライブラリー・ファイルを含めることはできません。言い換えれば:静的ライブラリをビルドしてプログラムに含めるには、ホストシステムの動的リンクライブラリを使用する必要があります。

Gentooでこれを行う方法

  1. 終わる選択したアーキテクチャのインストールマニュアル

  2. USEフラグおよび/または設定ファイルを微調整します(優れたツールはアプリケーション-Portage/ufedstatic、USE Flag Editorの略語)は、新しくインストールされたシステムで機能しますが、またはを追加しないでくださいstatic-libs。これにより、デスクトップ環境、サウンドサポート、カーネルの再構築などを追加でき、基本セットは動的@systemライブラリを引き続き使用できます。

    • 確実にするステップ2はエラーなしで完了しました。また、ステップ2を複数の部分に分けることができます。たとえば、デスクトップサポートを有効にしてemergeそのサポートを構築するために使用して再実行し、ufedいくつかの種類のグラフィックサポートを追加してからemergeやり直します。
  3. もう一度実行しufedてUSEフラグを追加しstaticてくださいstatic-libs。その後、ツリー全体を再構築し、各パッケージのサポートおよびUSEフラグを更新するには、emerge -eaforを実行します。--empty-tree --askstaticstatic-libs

私はこの方法を「2パス防弾方法、2パスコンパイルとも呼ばれる」と呼びます。ステップ2の最初のステップでは、ステップ3の開始時に問題がないことを確認します。手順3の2番目のパスが何らかの方法で失敗した場合は、エラーを修正して手順3を再開するか、emerge --resume前の手順のどれもユーザーのエラーによって破損しないことを知って使用して続行できます。以前は、エラーを修正した後、誤ったパッケージはインストールされません。)

中間者

私たちが見ると開発ユーティリティ/中間者パッケージリポジトリから我々は見ることができます電子ビルドUSEフラグを直接サポートするわけではありませんが、static多くの依存関係がサポートされているので、static必要なstatic-libsものを取得できます。

関連情報