ubuntu/debian intrepid + gcc-4.2 + gdb-6.8
以前也曾尝试过,可总由于方法不得当(编译器或GDB版本等),总是有所欠缺
1、常见错误及解决,
1)编译gdb时,gcc版本过高(比如4.3)会导致编译错误,
bscripts -Werror .././gdb/cli/cli-cmds.c
cc1: warnings being treated as errors
.././gdb/cli/cli-cmds.c: 在函数‘pwd_command’中:
.././gdb/cli/cli-cmds.c:323: 错误: 忽略声明有 warn_unused_result 属性的‘getcwd’的 返回值
make[2]: *** [cli-cmds.o] 错误 1
make[2]:正在离开目录 `/home/rambo/fc/gdb-6.8/gdb'
make[1]: *** [all-gdb] 错误 2
make[1]:正在离开目录 `/home/rambo/fc/gdb-6.8'
make: *** [all] 错误 2
from:
是源码中有些函数定义不规范,用对函数格式非常严格的GCC 4.3编译就会出错。
重新配置,使用gcc-4.2,另,需要操作 rm -rf build/*(清除历史配置信息)
2) 编译gdbserver时出现PATH_MAX undeclared错误的解决方法:
在hostio.c文件中增加
#include
原因是宏PATH_MAX在中没有定义,而是定义在中
2、附:编译过程,
1)编译 ARM 平台的 GDB
$ cd ~/cross
$ wget -c
$ tar jxvf gdb-6.8.tar.bz2
$ mkdir -p ~/corss/gdb-6.8/build //此处在源码目录下新建一build目录用以编译,是个好习惯~
$ cd ~/corss/gdb-6.8/build
gcc版本太高(比如4.3),编译会出错(参照错误及解决方法中的 1))
由于所使用系统中存在多个编译器,且默认为gcc-4.3,版本过高
因此配置的时候使用CC指定编译GDB所使用的编译器(gcc-4.2)
$ which gcc-4.2 -> /usr/bin/gcc-4.2
$ ../configure CC=gcc-4.2 --target=arm-linux --prefix=~/cross/install --program-prefix=arm-linux-
$ make
$ make install //安装至configure时--prefix指定路径下
至于如何连接到远程目标,可通过在目标板运行gdbserver
然后根据具体情况,选择串行或tcp或udp连接方式
2)编译 gdbserver
$ cd ~/cross/gdb-6.8/gdb/gdbserver
$ mkdir build
$ cd build
$ ../configure --target=arm-linux-gnu --host=arm-linux
$ make
到此,gdbserver交叉编译成功
注:只是对编译过程中出现的问题进行总结,不涉及使用,另行参照资料。
阅读(2231) | 评论(0) | 转发(0) |