ネストされた静的ライブラリの依存関係は可能ですか?


11

私はQTで働いています。

  1. 静的ライブラリは別の静的ライブラリに依存できますか?(静的ライブラリは別の静的ライブラリをリンクすることで作成されます)
  2. はいの場合、lib2にリンクした後、生成されたlib(lib1)にlib2のすべてのコードが含まれない可能性はありますか?

私のQtプロジェクトでは、複数のライブラリに依存する静的ライブラリを使用しています。すべてのライブラリ(プロジェクト内のすべてのヘッダーを含む)を追加する必要がありましたが、コードに必要なのは1つのlib(およびそのクラスの1つの.h)だけです。

シナリオを説明してください。

回答:


6

何かを宣言するときは、リンク中に利用可能になり、一意に識別されることを約束するだけです。静的ライブラリは、標準外の形式の定義のコンテナにすぎません。したがって、これには次の意味があります。

1)ここであなたが求めていることはよくわかりませんが、ある静的ライブラリは別の静的ライブラリに非常に依存する可能性があります。そのライブラリの定義は、実行可能ファイルの最終リンク段階で使用可能になると約束します(リンク依存関係として提供します)。または、静的ライブラリのリンク中に「マージ」します。

2)これに対する答えは、あなたがする必要がある唯一のことは、lib1のリンク中にlib2でリンクしないことだけであるということになる。

全体として、私の経験における最良のアプローチは、プライベートなライブラリのみをマージすることです。これは、プロジェクトの他の部分が依存関係を共有している場合、クライアントが複数定義されたシンボル違反に陥るからです。


つまり、別の静的ライブラリに依存するが、そのライブラリのリンク情報を含む静的ライブラリは可能です。つまり、プロジェクトに最初のライブラリを含める必要がある場合、2番目のライブラリも含める必要があります。Bcoz、最初のライブラリには2番目のライブラリのコード全体が含まれていません。
skパトラ

6

これに関する私の簡単な2ビット:10(すみません、ひどいジョーク)。

少し拡大するために、ここに行きます:

1-静的ライブラリは、別の静的ライブラリに依存する場合があります。動的ライブラリではありません。最初の2つのインスタンスでは、新しい静的ライブラリのすべてのコードが新しいSLL(静的リンクライブラリ)に組み込まれますが、3番目のオプション、環境に応じて、SLLが次のいずれかの結果になる可能性があります。

  • DLL(ダイナミックリンクライブラリ)から収集された、必要なコードの静的バージョンが含まれます。
  • または、はるかに恐ろしいことに、プロジェクトに含まれるときにDLLとともに出荷する必要がある静的ライブラリがあり、静的リンクのポイント全体を壊してしまいます。

要するに、静的ライブラリを静的ライブラリにリンクできます

2- lib1とlib2が両方とも静的であり、lib1がlib2とリンクされている場合、lib2 はlib1内で静的にリンクされるため、lib2を含める必要なく lib1内でlib2のすべての機能を使用できます(ロシアの人形をlib2と考えてください)小さい)。

説明するシナリオでは、含める必要のある各ファイルで個別の機能が使用可能でなければならず、静的にリンクされていないため、複数のファイルが必要です。

以下を実行してください:6つの静的にリンクされたライブラリへの参照を持つ1つの.hファイル:完全な機能を取得するには、プロジェクトに7つのファイルを含める必要があります

包含例1

前述の.hファイルから作成された1つのSLLは、コンパイル時のリンクに含まれる新しいSLLのみを必要とします。

包含例2

これがお役に立てば幸いです。あなたが何を求めているのか理解できたと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.