我有一个配置了--host=i686-pc-linux-gnu --target=powerpc-e300c3-linux-gnu
. 我可以正确调试远程板上的应用程序,gdbserver
但我收到有关版本不匹配的错误libthread_db
,libpthread
因此我无法正确调试线程(gdb
仅识别一个线程而不是三个线程)。也许这是由于不同版本的libc
: 在我拥有的主机libc2.15
和目标机器上lib2.5
。我试图libc2.5
为主机重新构建以便将 gdb 链接到它,但这是一个地狱。在我疯狂重建它之前,有人可以确认这是一个libc
问题吗?
问问题
5124 次
1 回答
2
我试图为主机重新构建 libc2.5 以便将 gdb 链接到它
那不是你需要的。
您需要的是 gdb 查找和加载libthread_db.so.1
与您的目标匹配的libpthread.so.0
。
为此,您需要
- 为主机构建
libc-2.5
,以及 - 设置 GDB
libthread-db-search-path
,使其找到libthread_db.so.1
步骤 1 中的内置内容。
您实际上不需要在步骤 1 中构建整个 libc。这样的事情就足够了:
mkdir build && cd build
../configure --prefix=/usr
make -C ../nptl_db objdir=`pwd`
更新:
我有 GDB 6.6,但没有 libthread-db-search-path。指定该路径的另一种方法是什么?
那个 GDB 将只是dlopen("libthread_db.so.1", ...)
. 所以要让它找到合适的libthread_db.so.1
,你需要调整LD_LIBRARY_PATH
。使用 bash:
LD_LIBRARY_PATH=/tmp/glibc-2.5/build/nptl_db gdb /path/to/target/a.out
于 2012-06-14T04:46:17.223 回答