我'配置了--host=i686-pc-linux-gnu --target=powerpc-e300c3-linux-gnu
的cross-gdb。我可以使用gdbserver
在远程控制板上正确调试应用程序,但我收到有关libthread_db
和libpthread
之间版本不匹配的错误,因此我无法正确调试线程({{ 1}}只识别一个线程而不是三个线程)。也许这是由于gdb
的不同版本:在主机上我libc
和目标计算机libc2.15
上。我试图为主机重建lib2.5
以便将gdb链接到它,但它是一个地狱。在我为重建它而疯狂之前,有人可能会确认它是libc2.5
问题吗?
答案 0 :(得分:1)
我尝试为主机重建libc2.5以便将gdb链接到它
这不是你需要的。
您需要的是gdb查找并加载libthread_db.so.1
,与您的目标libpthread.so.0
相匹配。
为此,你需要
libc-2.5
,libthread-db-search-path
,以便找到步骤1中构建的libthread_db.so.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