我有一个配置了 --host=i686-pc-linux-gnu --target=powerpc-e300c3-linux-gnu
的跨 gdb。我可以使用 gdbserver
正确调试远程板上的应用程序,但收到有关 libthread_db
和 libpthread
之间版本不匹配的错误,因此我可以'无法正确调试线程(gdb
只能识别一个线程而不是三个线程)。也许是由于 libc
版本不同所致:在主机上我有 libc2.15
,在目标机器上有 lib2.5
。我尝试为主机重新构建 libc2.5 以便将 gdb 链接到它,但这真是太糟糕了。在我疯狂地重建它之前,有人可以确认这是一个 libc
问题吗?
最佳答案
I tried to rebuid libc2.5 for host in order to link gdb against to it
这不是您需要的。
您需要的是 gdb 查找并加载与您的目标 libpthread.so.0
匹配的 libthread_db.so.1
。
为此,您需要
- 为主机构建
libc-2.5
,并且 - 设置 GDB 的
libthread-db-search-path
,以便找到在步骤 1 中构建的libthread_db.so.1
。
您实际上不需要在步骤 1 中构建整个 libc。类似这样的内容就足够了:
mkdir build && cd build
../configure --prefix=/usr
make -C ../nptl_db objdir=`pwd`
更新:
i have GDB 6.6 and there isn't libthread-db-search-path. What is another way to specify that 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
关于linux - 跨gdb : fix a mismatch between libthread_db and libpthread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11016598/