私は2つの異なるバージョンのライブラリを持っています.libxyz.soとしましょう
2 つの異なる場所で
1) /home/maverick/dev/libxyz.so ( development Version)
2) /home/maverick/prod/libxyz.so ( Production Version )
プログラムをコンパイルし、LD_LIBRARY_PATH に応じてライブラリの適切なバージョンにリンクするセットアップがあります。たとえば、自分のプログラムを libxyz.so の dev バージョンとリンクしたい場合は、LD_LIBRARY_PATH を変更して /home/maverick/dev を追加し、prod バージョンとリンクしたい場合は、LD_LIBRARY_PATH を変更して /home/maverick/prod を追加します。
開発バージョンとの出力をリンクしてプログラムをコンパイルしました
ldd MyProg
は
libxyz.so => /home/maverick/dev/libxyz.so
プログラムを実行すると、libxyz.soがロードされます
/home/maverick/dev/libxyz.so
そしてうまくいきます。この時点で、私の LD_LIBRARY_PATH には /home/maverick/dev ではなく /home/maverick/prod が含まれています
しかし、GDBを介してこのプログラムをデバッグしようとすると
gdb MyProg
場所からlibxyz.soをロードします
/home/maverick/prod/libxyz.so
デバッグ中に GDB にライブラリの正しいバージョンをロードさせるのに問題があります。だから今まで私がやっていることは、最初にプログラム(devバージョンをロードする)を起動し、gdbをそのPIDにアタッチすることです。しかし、それが次のように実行される場合
gdb MyProg
そうではない
GDBでsysroot、solib-search-pathを設定するなど、これを修正するためにあらゆることを試みましたが、何も機能していません。実際、ライブラリ gdb のデバッグ バージョンを指すように sysroot を設定したときに、次のようなメッセージが表示された場合
.dynamic section for XXX is not at the expected address
任意の提案をいただければ幸いです。