少なくともLinuxとSolarisでは、静的ライブラリは実際にコンパイルされた.oの束を1つの大きなファイルに投げ込んでいるだけです。静的ライブラリをコンパイルする場合、通常は-fpicフラグが指定されないため、生成されるコードは位置に依存します。共有ライブラリをスタティックライブラリにリンクする:アプリケーションがリンクしていた場合とは異なるスタティックライブラリをコンパイルする必要がありますか?
ここで私の静的ライブラリはB.です。私はそれを作りました。結果の.aファイルは実際には位置依存の.oファイルすべてのグロブです。今度はビルドしたい共有ライブラリがあります。AとBを静的にリンクしたいのですが、Aをビルドすると、当然、-fpicフラグを使用して生成されたコード位置を独立させます。しかし、私がBにリンクしている場合、位置依存と位置独立オブジェクトファイルを混在させるのではないのですか?
-mimpure-textも指定しない限り、テキストの再配置エラーが多く発生していますが、これが原因と考えられます。私はライブラリをコンパイルするときに、実際にコンパイルする必要があります。回、共有バージョン、静的バージョン、および静的な使用可能な共有ライブラリのバージョンです。私は正しい?私は-mimpure-textを続けて使うことができますが、g ++のマニュアルページには、オブジェクトを共有すると実際には共有されません(すべて共有されていないか、静的にリンクされているかどうかは不明です)。 。
最初の段落で '-fpic'を省略して位置依存コードにして、それを第2段落で使用して、位置に依存しないコードにしています。 –