2

GDB でクロス デバッグ セッションを実行します。GDB は、ドキュメントで説明されているように、オプション --with-sysroot で構成されています。私のアプリケーションは、次のような共有ライブラリを使用します。

コード:

    libpthread.so.0 => /lib/libpthread.so.0 (0x40026000)
    libm.so.6 => /lib/libm.so.6 (0x40046000)
    libdl.so.2 => /lib/libdl.so.2 (0x400b9000)
    librt.so.1 => /lib/librt.so.1 (0x400c4000)
    libts-0.0.so.0 => /usr/lib/libts-0.0.so.0 (0x400d3000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x4015f000)
    libz.so.1 => /usr/lib/libz.so.1 (0x401d3000)
    libjpeg.so.8 => /usr/lib/libjpeg.so.8 (0x401ee000)

ライブラリ pthread、libdl、... はツールチェーンにあり、set sysroot--with-sysrootおよびset solib-absolute-pathによって宣言されて います ライブラリ libts、libz、... は共有ライブラリの追加パスで利用できますset solib-search-path を使用してセッションで宣言された

ライブラリ libfreetype、libjpeg の場合、次のエラーが発生します。

102,416 &"警告: `/usr/lib/libfreetype.so.6': 不明な共有ライブラリ アーキテクチャは、ターゲット アーキテクチャ アームと互換性がありません。\n"
102,416 =library-loaded,id="/usr/lib/libfreetype.so .6",target-name="/usr/liblibfreetype.so.6",host-name="/usr/lib/libfreetype.so.6",symbols-loaded="0",thread-group="i1 "

GDBがホスト rootfs のライブラリーを引き続き使用する理由は、ツールチェーンで見つからず、ホスト rootfs で使用できるためです。set solib-search-path で宣言された追加のパスは気にしません

--with-sysroot で GDB を構成し、追加のset sysrootを宣言し、solib-search-path設定し、 solib-absolute-pathを設定しました ( set sysrootのエイリアスは気にしません)。

ドキュメントでは、--prefixは sysroot を自動的に取得するように GDB を構成しますが、これが--with-sysrootよりも前にあるのはなぜですか?

GDB はsysroothost-sysrootsolib-search-pathの順序を使用していますか?

ホストrootfsを使用しないように、GDBに伝えなかったのは何ですか?

4

1 に答える 1

0

まったく同じ問題を追跡する gdb バグがありますhttp://sourceware.org/bugzilla/show_bug.cgi?id=13989

バージョン gdb-7.4 まで修正されていません。したがって、この動作は以前のバージョンで想定されていると思います。

于 2013-03-10T03:37:11.203 に答える