回答:
何かを宣言するときは、リンク中に利用可能になり、一意に識別されることを約束するだけです。静的ライブラリは、標準外の形式の定義のコンテナにすぎません。したがって、これには次の意味があります。
1)ここであなたが求めていることはよくわかりませんが、ある静的ライブラリは別の静的ライブラリに非常に依存する可能性があります。そのライブラリの定義は、実行可能ファイルの最終リンク段階で使用可能になると約束します(リンク依存関係として提供します)。または、静的ライブラリのリンク中に「マージ」します。
2)これに対する答えは、あなたがする必要がある唯一のことは、lib1のリンク中にlib2でリンクしないことだけであるということになる。
全体として、私の経験における最良のアプローチは、プライベートなライブラリのみをマージすることです。これは、プロジェクトの他の部分が依存関係を共有している場合、クライアントが複数定義されたシンボル違反に陥るからです。
これに関する私の簡単な2ビット:10(すみません、ひどいジョーク)。
少し拡大するために、ここに行きます:
1-静的ライブラリは、別の静的ライブラリに依存する場合があります。動的ライブラリではありません。最初の2つのインスタンスでは、新しい静的ライブラリのすべてのコードが新しいSLL(静的リンクライブラリ)に組み込まれますが、3番目のオプション、環境に応じて、SLLが次のいずれかの結果になる可能性があります。
要するに、静的ライブラリを静的ライブラリにリンクできます
2- lib1とlib2が両方とも静的であり、lib1がlib2とリンクされている場合、lib2 はlib1内で静的にリンクされるため、lib2を含める必要なく lib1内でlib2のすべての機能を使用できます(ロシアの人形をlib2と考えてください)小さい)。
説明するシナリオでは、含める必要のある各ファイルで個別の機能が使用可能でなければならず、静的にリンクされていないため、複数のファイルが必要です。
以下を実行してください:6つの静的にリンクされたライブラリへの参照を持つ1つの.hファイル:完全な機能を取得するには、プロジェクトに7つのファイルを含める必要があります
前述の.hファイルから作成された1つのSLLは、コンパイル時のリンクに含まれる新しいSLLのみを必要とします。
これがお役に立てば幸いです。あなたが何を求めているのか理解できたと思います。