Linux 交叉gdb:修复libthread_db和libpthread之间的不匹配

Linux 交叉gdb:修复libthread_db和libpthread之间的不匹配,linux,debugging,gdb,remote-debugging,Linux,Debugging,Gdb,Remote Debugging,我已经用--host=i686 pc-linux-gnu--target=powerpc-e300c3-linux-gnu配置了一个跨gdb。我可以使用gdbserver正确调试远程板上的应用程序,但我得到一个错误,即libthread\u db和libpthread之间的版本不匹配,因此我无法正确调试线程(gdb只识别一个线程,而不是三个线程)。可能是因为libc的版本不同:在主机上我有libc2.15,在目标机上有lib2.5。我试图为主机重新编译libc2.5,以便将gdb链接到主机,但这

我已经用
--host=i686 pc-linux-gnu--target=powerpc-e300c3-linux-gnu
配置了一个跨gdb。我可以使用
gdbserver
正确调试远程板上的应用程序,但我得到一个错误,即
libthread\u db
libpthread
之间的版本不匹配,因此我无法正确调试线程(
gdb
只识别一个线程,而不是三个线程)。可能是因为libc的版本不同:在主机上我有libc2.15,在目标机上有lib2.5。我试图为主机重新编译
libc2.5
,以便将gdb链接到主机,但这是一个地狱。在我疯狂地重建它之前,有人能确认这是一个
libc
问题吗

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

那不是你需要的

您需要的是gdb查找并加载与目标
libpthread.so.0
匹配的
libthread\u db.so.1

为此,你需要

  • 为主机构建
    libc-2.5
    ,以及
  • 设置GDB的
    libthread数据库搜索路径
    ,以便它查找步骤1中内置的
    libthread\u db.so.1
  • 实际上,您不需要在步骤1中构建整个libc。这样的东西应该足够了:

    mkdir build && cd build
    ../configure --prefix=/usr
    make -C ../nptl_db objdir=`pwd`
    
    更新:

    我有GDB6.6,没有libthreadDB搜索路径。指定该路径的另一种方法是什么

    GDB将只
    dlopen(“libthread\u db.so.1”,…)
    。因此,要使其找到正确的
    libthread\u db.So.1
    ,需要调整
    LD\u LIBRARY\u路径。使用bash:

    LD_LIBRARY_PATH=/tmp/glibc-2.5/build/nptl_db gdb /path/to/target/a.out
    
    我试图为主机重新构建libc2.5,以便将gdb链接到主机

    那不是你需要的

    您需要的是gdb查找并加载与目标
    libpthread.so.0
    匹配的
    libthread\u db.so.1

    为此,你需要

  • 为主机构建
    libc-2.5
    ,以及
  • 设置GDB的
    libthread数据库搜索路径
    ,以便它查找步骤1中内置的
    libthread\u db.so.1
  • 实际上,您不需要在步骤1中构建整个libc。这样的东西应该足够了:

    mkdir build && cd build
    ../configure --prefix=/usr
    make -C ../nptl_db objdir=`pwd`
    
    更新:

    我有GDB6.6,没有libthreadDB搜索路径。指定该路径的另一种方法是什么

    GDB将只
    dlopen(“libthread\u db.so.1”,…)
    。因此,要使其找到正确的
    libthread\u db.So.1
    ,需要调整
    LD\u LIBRARY\u路径。使用bash:

    LD_LIBRARY_PATH=/tmp/glibc-2.5/build/nptl_db gdb /path/to/target/a.out
    

    非常感谢。我会尽力去做的。但是我有GDB6.6,并且没有libthreadDB搜索路径。另一种指定路径的方法是什么?
    libc
    默认情况下不允许在src根目录中启动
    configure
    ,因此我有一个目录
    build
    ,并在其内部启动
    。/configure--prefix=/usr
    ,但是
    make-C../nptl_db
    由于配置的路径而不起作用。有什么想法吗?@MirkoBanchi我已经更新了回答你的两个评论。谢谢。但是现在我无法重建ntpl_db@MirkoBanchi我见过的GDB版本都没有这样做。您可以通过在调用GDB之前设置
    LD_DEBUG=libs
    来查看GDB正在做什么。谢谢。我会尽力去做的。但是我有GDB6.6,并且没有libthreadDB搜索路径。另一种指定路径的方法是什么?
    libc
    默认情况下不允许在src根目录中启动
    configure
    ,因此我有一个目录
    build
    ,并在其内部启动
    。/configure--prefix=/usr
    ,但是
    make-C../nptl_db
    由于配置的路径而不起作用。有什么想法吗?@MirkoBanchi我已经更新了回答你的两个评论。谢谢。但是现在我无法重建ntpl_db@MirkoBanchi我见过的GDB版本都没有这样做。您可以通过在调用GDB之前设置
    LD_DEBUG=libs
    来查看GDB正在做什么。