私はgccコンパイル済みのアプリケーションを動的ライブラリーとリンクしています。ライブラリがロードされる順序を強制する方法はありますか? (私の場合、あるライブラリコンストラクタは、他のライブラリコンストラクタによって設定されたリソースを使用します)。ライブラリーの読み込み順
ありがとうございました。
私はgccコンパイル済みのアプリケーションを動的ライブラリーとリンクしています。ライブラリがロードされる順序を強制する方法はありますか? (私の場合、あるライブラリコンストラクタは、他のライブラリコンストラクタによって設定されたリソースを使用します)。ライブラリーの読み込み順
ありがとうございました。
gcc
はライブラリをロードする責任を負いません。プログラムがロードされると自動的にld.so
が実行されるか、@jldupontが示唆するように手動で実行します。
そしてld.so
は意図的にrandomiseに戻ってstdlibへの攻撃を防ぐことができます。
だから、次のいずれか
-l<dependentlib>
が含まれていることを確認してください。これをテストするには、その共有ライブラリとのみリンクするtrivalプログラムを作成します。ビルドして実行すると、必要なすべての依存ライブラリがライブラリに含まれています。これはld.soが依存関係の順序でライブラリをロードする場合に役に立ちます。dlopen
を使用してライブラリをロードすることができます。この方法では、ローディング/アンロードのプロセスをより細かく制御できます。 hereを参照してください。
もちろん、これは "gcc"ベースのソリューションではありません。アプリケーションのリワークが必要です...あなたが直面している「問題」についてもう少し詳しく説明できますか?
あなたのニーズに合わない場合は、私のソリューションを無視することができます。乾杯!
"ライブラリに依存関係が含まれているようにする"にはどうすればよいですか? – jackhab
@ジャック - 私の答えを編集 - 基本的にライブラリをリンクするときは、すべての依存関係のライブラリがリンクされていることを確認してください。 –