2

スタティック(コメントを読んだ後にスタティックを追加) C++ ライブラリ PoDoFo とその依存関係の一部 (libJPEG、libTiff、libPNG など) をコンパイルしています。ただし、多くのライブラリには、相互に依存するオプションもあります。たとえば、libTIFF を libJPEG でコンパイルすることにより、libTiff での JPEG サポートを有効にすることができます。

完璧な世界では、私は PoDoFo のコンパイルに libJPEG を含めたので、libJPEG にアクセスできることを認識して、libTIFF が libJPEG 関数を有効にすることを願っています。悲しいことに、関数の有効化/無効化は、libTIFF を最初にコンパイルするときに決定されると思います。

つまり、私の PoDoFo ライブラリには libJPEG が複数回含まれ、同じライブラリを使用すると、おそらく同一のコピーが含まれることになります。

GCCコンパイラはこれを認識し、ライブラリを削除/再リンクしてlibJPEGの1つのコピーだけにしますか?

4

2 に答える 2

0

すべてのライブラリが動的にリンクされていると仮定すると、実行時リンカーは各依存ライブラリの 1 つのコピーのみをロードします (したがって、libJPEG の 1 つのコピーがロードされます)。

完璧な世界では、私は PoDoFo のコンパイルに libJPEG を含めたので、libTIFF が libJPEG にアクセスできることを認識して libJPEG 関数を有効にすることを願っていますが、残念ながら、libTIFF を最初にコンパイルしたときに関数の有効化/無効化が決定されると思います。

説明する機能は遅延読み込みと呼ばれ、Windows ではサポートされていますが、Linux ではサポートされていません (少なくともデフォルトではサポートされていません。Implib.soツールを参照してください)。

于 2020-07-16T05:38:21.820 に答える