5

Linux でこの共有ライブラリ (.so を使用) 拡張子を変更しようとしています。デバッグするためにいくつかの printf ステートメントと fprintf ステートメントを挿入していますが、効果がありません。.so ファイルを削除したところ、プログラムがまだ正常に実行されていることがわかりました。プログラムがメモリにロードされているということですか?? (しかし、私がテストしているプログラムだけがその.soファイルを使用していると確信しています)

プログラムが変更されたものをロードしていることを確認できるように、アンロードするにはどうすればよいですか?

4

2 に答える 2

10

いいえ、共有ライブラリはメモリにキャッシュされません。ファイルを削除して.soもプログラムがまだ実行されている場合は、次のいずれかを行います。

  • .soプログラムが別の場所から同じ名前の をロードしている、または
  • プログラムはロードせずに実行できます.so

.soがプログラムの起動時にロードされることになっている場合、を使用lddして、OS が.so実際に認識している場所を見つけることができます。

.soが実行時に動的に読み込まれる場合、strace何が起こっているのかを特定するのに役立つ可能性があります。

于 2012-07-23T03:57:21.663 に答える
4

/proc/1234/mapsプロセス 1234 のメモリ マップを読み取ることができます。これは、動的にロードされた共有オブジェクトも示しています。

環境変数を使用してLD_LIBRARY_PATH、共有ライブラリのパスを変更し、ldconfigそのキャッシュをアップグレードできます。/etc/ld.so.confなどもご覧ください。

もちろん、共有ライブラリをロードするプログラムを再起動する必要があります。

于 2012-07-23T06:06:18.430 に答える