【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】详解gdb+gdbserver运行

2019-07-13 06:01发布

  详解gdb+gdbserver运行问题./gdbserver: error in loading shared libraries Sailor_forever  Sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/04/16/2295598.aspx 【摘要】:本文分析了gdb+gdbserver运行过程中的库依赖问题,转贴我在linuxforum.net上的精华帖。 【关键词】:gdbgdbserver远程调试交叉调试 arm   原帖链接 http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=646309&fpart=1&PHPSESSID=   现象: ./gdbserver: error in loading shared libraries: libthread_db.so.1: cannot open shared object file: No such file or directory   我目前的开发环境是主机REDHat 2.4.20 板子内核 2.4.19rmk7 编译器2.95.3   问题: 1. version mismatch between libthread_db and libpthread是不是导致下面我找不到那个动态库? 2. gdb版本和内核及编译器版本是怎么匹配的? 3. 那个libthread_db.so.1动态链接库的快捷方式到底指向哪?   过程: 1. gdb6.5/6.1/5.3 都存在 网上都说直接注销这个头文件就行了,不知到跟下面找不到库有没有关系 make: *** [linux-arm-low.o] Error 1 [root@dding gdbserver]# [root@dding gdbserver]# gedit config.h /* Define to 1 if you have the header file. */ /*define HAVE_SYS_REG_H 1 */ /*have no header file. so undefine 20070402 dding */ 2. thread-db.c: In function `thread_db_err_str': gdb6.5 此版我注销了这个,好像跟下面那个库的名字很关联啊 thread-db.c:95: `TD_VERSION' undeclared (first use in this function) [root@dding gdbserver]# gedit config.h 94 #ifdef HAVE_TD_VERSION 95 case TD_VERSION: 96 return "version mismatch between libthread_db and libpthread"; 97 #endif /* Define if TD_VERSION is available. */ /*#define HAVE_TD_VERSION 1 */ /*have no TD_VERSION. so undefine 20070402 dding */ gdb6.1/5.3的源代码中没有94――96行,故没有此问题,但是库的问题仍然存在 3. [root@AT91RM9200DK arm]$./gdbserver 192.168.0.12:2345 mainparacarm gdb6.5 ./gdbserver: error in loading shared libraries: libthread_db.so.1: cannot open   [root@AT91RM9200DK arm]$./gdbserver 192.168.0.14:2345 mainparacarm gdb6.1/5.3 ./gdbserver: error in loading shared libraries: libthread_db.so.1: cannot open shared object file: No such file or directory   我板子上的Lib库里确实没有上述库,可我在交叉编译器的库里找不到这个,库里面它是个快捷方式,不知道连接到哪了?动态库这边我不怎么明白   Gcc库里面的这个文件能用么?   两个交叉编译器件版本里都没有libthread_db.so.1,是不是我找的地方不对啊? 我怀疑libthread_db.so.1指向libthread_db-1.0.so,就直接将其拷贝了,放到库里,问题没了,可要提示/lib/libc.so.6: version `GLIBC_2.2' not found?如下 [root@AT91RM9200DK arm]$cp libthread_db-1.0.so libthread_db.so.1 [root@AT91RM9200DK arm]$cp libthread_db.so.1 /lib/ [root@AT91RM9200DK arm]$./gdbserver 192.168.0.12:2345 mainparacarm ./gdbserver: /lib/libc.so.6: version `GLIBC_2.2' not found (required by /lib/li)   编译的时候那个库有用么?还是说在运行的时候用?不知道是我的文件系统里面的问题还是怎么着的?   网上有说编译GDB的时候搞成静态的就好了.就在Makefile里加上CFLAGS += -static,但我试了下,编译通不过   另外我在网上看2.4内核用gdb5.32.6内核用gdb6.1以上,是这样么?   请各位大虾帮我分析下吧,我好几个版本都试了,就不行,网上别人说的好像都没什么问题,我怎么就这么不顺啊   ××××××××××××××××××××××××××××××××××××××××× 问题解决了呵呵,把过程说下,总的来说就是文件系统的问题缺少多线程库libthread_db.so.1以及版本太低   1、确定libthread_db.so.1指向的文件 编译中的问题并不影响libthread_db.so.1,其指向libthread_db-1.0.so 在交叉编译器的arm-linux/lib/下面执行 [root@dding lib]# ls -l | grep libthread_db.so.1 lrwxrwxrwx 1 ding dip 17 3 18 23:42 libthread_db.so -> libthread_db.so.1 lrwxrwxrwx 1 ding dip 19 3 18 23:42 libthread_db.so.1 -> libthread_db-1.0.so 当前目录下面 [root@dding lib]# pwd /usr/local/arm/2.95.3/arm-linux/lib   不能在cygwin下面查找到其连接,windows不支持符号连接,cygwin采用的fat系统 lrwxrwxrwx 1 2619 man 29 4 20 17:01 libthread_db-1.0.so -> ../../lib/libthread_db-1.0.so 指向了自己,不对   二、拷贝libthread_db-1.0.so到板子上,并建立libthread_db.so.1符号连接 [root@AT91RM9200DK /lib]ln -s libthread_db-1.0.so libthread_db.so.1 [root@AT91RM9200DK /lib]$ls -l libth* ##将文件拷贝到板子的lib,并建立软链接 -rwxr-xr-x 1 root root 212987 Jan 1 02:01 libthread_db-1.0.so lrwxrwxrwx 1 root root 19 Jan 1 02:02 libthread_db.so.1 ->libthread_db-1.0.so   三、运行gdbserverloading错误消失 [root@AT91RM9200DK /nfs]./gdbserver 192.168.0.12:2345 gdbsamplearm ./gdbserver: /lib/libc.so.6: version `GLIBC_2.2' not found (required by /lib/libthread_db.so.1)   四、GLIBC_2.2'版本问题 ##查看lib.so.6的版本问题 GLIBC_2.2 [root@AT91RM9200DK arm]$cd /lib/ [root@AT91RM9200DK /lib]$ls -l libc.so.6 lrwxrwxrwx 1 root root 13 Jul 28 2004 libc.so.6 -> libc-2.1.3.so [root@AT91RM9200DK /lib]$ls -l libc-2.1.3.so -rwxr-xr-x 1 root root 949768 May 9 2003 libc-2.1.3.so 板子上的libc库即libc-2.1.3.so不是2.2版本的不能用   五、重新拷贝主机上的交叉编译器里的libc-2.2.3.so到板子上   至此,一切OK