交叉编译环境中编译出目标gdb:
1、fakeroot
2、导入交叉编译链
export TOOLCHAIN_BASE=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr
export TOOLCHAIN_LIB=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/arm-buildroot-linux-gnueabi/sysroot/lib
export PATH=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/bin/:/new_home/liyong/bin:/new_home/liyong/.local/bin:/usr/lib/jvm/java-8-openjdk-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/repo:/snap/bin
export CROSS_COMPILE=arm-buildroot-linux-gnueabi-
export CC=arm-buildroot-linux-gnueabi-gcc -mfloat-abi=soft
export CCC=arm-buildroot-linux-gnueabi-g++ -mfloat-abi=soft
export LD=arm-buildroot-linux-gnueabi-ld
export AR=arm-buildroot-linux-gnueabi-ar
export STRIP=arm-buildroot-linux-gnueabi-strip
export RANLIB=arm-buildroot-linux-gnueabi-ranlib
export SYSROOT=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/arm-buildroot-linux-gnueabi/sysroot
export LD_LIBRARY_PATH=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/lib:/usr/lib/x86_64-linux-gnu/libfakeroot:/usr/lib64/libfakeroot:/usr/lib32/libfakeroot
#添加 termcap
export LDFLAGS="-L/new_home/liyong/build/termcap-1.3.1/libtermcap.a"
export CFLAGS="-I/new_home/liyong/build/termcap-1.3.1/libtermcap.a"
注: libtermcap.a 需要另外生成
其他的一些没必要的选项
export GDB=arm-buildroot-linux-gnueabi-gdb
export OBJCOPY=arm-buildroot-linux-gnueabi-objcopy
export OBJDUMP=arm-buildroot-linux-gnueabi-objdump
export NM=arm-buildroot-linux-gnueabi-nm
export M4=m4
export CXXFLAGS=" -O2 -fexpensive-optimizations -frename-registers -fomit-frame-pointer -fstack-protector-strong -pie -fpie -Wa,--noexecstack -fvisibility-inlines-hidden"
export CXXFLAGS=" -O2 -fPIC -fexpensive-optimizations -frename-registers -fomit-frame-pointer -fstack-protector-strong -pie -fpie -Wa,--noexecstack -fvisibility-inlines-hidden"
export CXFLAGS=" -O2 -fPIC -fexpensive-optimizations -frename-registers -fomit-frame-pointer -fstack-protector-strong -pie -fpie -Wa,--noexecstack -fvisibility-inlines-hidden"
export ARCH_CFLAGS=
export ARCH=arm
export LIBGCC=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/lib/gcc/arm-buildroot-linux-gnueabi/4.9.3/libgcc.a
export CROSSCOMPILE_FLAG=1
#new
export TOOLCHAIN_BASE=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr
export TOOLCHAIN_LIB=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/arm-buildroot-linux-gnueabi/sysroot/lib
export PATH=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/bin/:/new_home/liyong/bin:/new_home/liyong/.local/bin:/usr/lib/jvm/java-8-openjdk-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/repo:/snap/bin
export CROSS_COMPILE=arm-buildroot-linux-gnueabi-
export CC=arm-buildroot-linux-gnueabi-gcc -mfloat-abi=soft
export CCC=arm-buildroot-linux-gnueabi-g++ -mfloat-abi=soft
export LD=arm-buildroot-linux-gnueabi-ld
export AR=arm-buildroot-linux-gnueabi-ar
export STRIP=arm-buildroot-linux-gnueabi-strip
export RANLIB=arm-buildroot-linux-gnueabi-ranlib
export SYSROOT=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/arm-buildroot-linux-gnueabi/sysroot
export LD_LIBRARY_PATH=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/lib:/usr/lib/x86_64-linux-gnu/libfakeroot:/usr/lib64/libfakeroot:/usr/lib32/libfakeroot
#添加 termcap
export LDFLAGS="-L/new_home/liyong/build/termcap-1.3.1/libtermcap.a"
export CFLAGS="-I/new_home/liyong/build/termcap-1.3.1/libtermcap.a"
export GDB=arm-buildroot-linux-gnueabi-gdb
export OBJCOPY=arm-buildroot-linux-gnueabi-objcopy
export OBJDUMP=arm-buildroot-linux-gnueabi-objdump
export NM=arm-buildroot-linux-gnueabi-nm
export M4=m4
export CXXFLAGS=" -O2 -fexpensive-optimizations -frename-registers -fomit-frame-pointer -fstack-protector-strong -pie -fpie -Wa,--noexecstack -fvisibility-inlines-hidden"
export CXXFLAGS=" -O2 -fPIC -fexpensive-optimizations -frename-registers -fomit-frame-pointer -fstack-protector-strong -pie -fpie -Wa,--noexecstack -fvisibility-inlines-hidden"
export CXFLAGS=" -O2 -fPIC -fexpensive-optimizations -frename-registers -fomit-frame-pointer -fstack-protector-strong -pie -fpie -Wa,--noexecstack -fvisibility-inlines-hidden"
export ARCH_CFLAGS=
export ARCH=arm
export LIBGCC=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr/lib/gcc/arm-buildroot-linux-gnueabi/4.9.3/libgcc.a
export CROSSCOMPILE_FLAG=1
#configuration
./configure --host=arm-linux --enable-shared --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext
脚本记录:
export TOOLCHAIN_BASE=/opt/trendchip/buildroot-gcc493_glibc222_arm32_32bServer/usr
export TOOLCHAIN_LIB=$(TOOLCHAIN_BASE)/arm-buildroot-linux-gnueabi/sysroot/lib
export HOST=arm-linux
export CROSS=arm-buildroot-linux-gnueabi-
export PATH :=$(TOOLCHAIN_BASE)/bin/:$(PATH)
export CROSS_COMPILE=$(CROSS)
export CC=$(CROSS)gcc -mfloat-abi=soft
export CCC=$(CROSS)g++ -mfloat-abi=soft
export LD=$(CROSS)ld
export LD = $(CROSS)ld
export AR=$(CROSS)ar
export STRIP=$(CROSS)strip
export RANLIB = $(CROSS)ranlib
export SYSROOT=$(TOOLCHAIN_BASE)/arm-buildroot-linux-gnueabi/sysroot
export LD_LIBRARY_PATH:=$(TOOLCHAIN_BASE)/lib:$(LD_LIBRARY_PATH)
export ARCH_CFLAGS =liyong:
echo "Build liyong"
echo "liyong"
$(MAKE) -C gdb-7.1/
if test -e gdb-7.1/gdb; \
then echo "Compile liyong success"; \
else echo "Compile liyong error!"; exit 1; \
fi
3、在gdb工程文件下,执行./configure --host=arm-linux 生成目标makefile文件
4、执行make 生成gdb 目标文件,生成的gdb文件在gdb目录下
6、导入板子测试
7、测试程序
Linux下,程序的发布方式有两种,debug模式和release模式,通过gcc/g++编译形成的可执行文件默认是release模式的,也就是说不能够进行调试,因此要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,才会在生成的可执行目标文件中带上.debug节
对于已经生成的源文件,可以通过下面的命令查看目标文件中的信息
readelf -S a.out | grep -i debug
readelf -S [filename] | grep -i debug
// readelf 用于读取和显示 ELF (Executable and Linkable Format) 文件信息
// -S 显示 ELF 文件的所有节(section)的信息
// grep -i 选项表示忽略大小写
使用arm进行编译
arm-buildroot-linux-gnueabi-gcc -mfloat-abi=soft -g liyong.c
启动gdb成功之后,最后一行信息显示如下,说明调试信息读取成功,可以进行调试
Reading symbols from /home/hqs/code/April/3/test.debug...done.
8、GDB调试手册: