私は C/C++ プログラマーではなく、Cでのライブラリーのリンケージがどのように機能するかについてほとんど知らないという重要な通知を前置きしたいと思います。
私たちのコードは libstdc++.so.6 (gcc 3.4 だと思います) を使用しています。libstdc++.so.5 (gcc 2.something または 3.2 だと思います) を使用するサードパーティのプリコンパイル済み (クローズド ソース) ライブラリがあります。これはLinux上にあります。サードパーティ製ライブラリの .a バージョンと .so バージョンの両方があります。
サードパーティのライブラリを使用してアプリを構築することは可能ですか? どのように?libstdc++.so.5 をマシンにインストールせずにアプリをビルド/実行することは可能ですか?
重要な情報を忘れてしまった場合は、お知らせください。これに関連する内容がほとんどわかりません。完全な答えはおそらく不可能だと思います。私は本当に方向性とガイダンスを探しています。これを静的にリンクする、それを動的にリンクする、それを再構築する、まあまあを事前に構築する、バージョン x に切り替える、または quizdoodle をシンボリック リンクする、など。
アップデート:
dlopen
withを使用しRTLD_LOCAL
て、サードパーティのライブラリをアプリの残りの部分から分離しようとしました。これはほとんど機能しているように見えますが、原因不明の大量のメモリ リークが残っています。を呼び出すdlopen
と、サード パーティのライブラリがmalloc
既に読み込まれている .so.6 などのシンボルを取り込み、混乱が生じるのではないかと考えています。
くすくす笑いながら、サードパーティのライブラリを に入れてみて、LD_PRELOAD
アプリを実行したところ、メモリ リークが完全になくなったようです。