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 はsysroot、host-sysroot、solib-search-pathの順序を使用していますか?
ホストrootfsを使用しないように、GDBに伝えなかったのは何ですか?