2009-12-07 12 views
5

私はgccコンパイル済みのアプリケーションを動的ライブラリーとリンクしています。ライブラリがロードされる順序を強制する方法はありますか? (私の場合、あるライブラリコンストラクタは、他のライブラリコンストラクタによって設定されたリソースを使用します)。ライブラリーの読み込み順

ありがとうございました。

答えて

5

gccはライブラリをロードする責任を負いません。プログラムがロードされると自動的にld.soが実行されるか、@jldupontが示唆するように手動で実行します。

そしてld.soは意図的にrandomiseに戻ってstdlibへの攻撃を防ぐことができます。

だから、次のいずれか

  1. ロードライブラリを自分で。
  2. または、ライブラリロードスクリプト間の依存関係を削除します。
  3. ライブラリに依存関係が含まれているようにしてください(動作する可能性があります) 各共有ライブラリをリンクする時点になると、リンクコマンドに-l<dependentlib>が含まれていることを確認してください。これをテストするには、その共有ライブラリとのみリンクするtrivalプログラムを作成します。ビルドして実行すると、必要なすべての依存ライブラリがライブラリに含まれています。これはld.soが依存関係の順序でライブラリをロードする場合に役に立ちます。
+0

"ライブラリに依存関係が含まれているようにする"にはどうすればよいですか? – jackhab

+0

@ジャック - 私の答えを編集 - 基本的にライブラリをリンクするときは、すべての依存関係のライブラリがリンクされていることを確認してください。 –

3

dlopenを使用してライブラリをロードすることができます。この方法では、ローディング/アンロードのプロセスをより細かく制御できます。 hereを参照してください。

もちろん、これは "gcc"ベースのソリューションではありません。アプリケーションのリワークが必要です...あなたが直面している「問題」についてもう少し詳しく説明できますか?

あなたのニーズに合わない場合は、私のソリューションを無視することができます。乾杯!

関連する問題