2

我有一个配置了--host=i686-pc-linux-gnu --target=powerpc-e300c3-linux-gnu. 我可以正确调试远程板上的应用程序,gdbserver但我收到有关版本不匹配的错误libthread_dblibpthread因此我无法正确调试线程(gdb仅识别一个线程而不是三个线程)。也许这是由于不同版本的libc: 在我拥有的主机libc2.15和目标机器上lib2.5。我试图libc2.5为主机重新构建以便将 gdb 链接到它,但这是一个地狱。在我疯狂重建它之前,有人可以确认这是一个libc问题吗?

4

1 回答 1

2

我试图为主机重新构建 libc2.5 以便将 gdb 链接到它

那不是你需要的。

您需要的是 gdb 查找和加载libthread_db.so.1与您的目标匹配的libpthread.so.0

为此,您需要

  1. 为主机构建libc-2.5,以及
  2. 设置 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 回答