Chinaunix首页 | 论坛 | 博客
  • 博客访问: 726262
  • 博文数量: 66
  • 博客积分: 2418
  • 博客等级: 大尉
  • 技术积分: 1659
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-28 10:04
个人简介

keep moving

文章分类

全部博文(66)

文章存档

2015年(2)

2014年(6)

2013年(7)

2011年(7)

2010年(42)

2009年(2)

分类: 嵌入式

2010-04-13 17:13:20

交叉调试时arm-linux-gdb提示:No symbol table is loaded.  Use the "file" command.
导致这个错误的原因一般是:在交叉编译时没有加-g选项.
但有时明明我们已在Makefile里加上了-g选项,交叉调试时还是提示“No symbol table is loaded.  Use the "file" command.”
比如,以下Makefile文件
TOPDIR = ../
include $(TOPDIR)Rules.mak

EXTRA_LIBS += -lpthread

EXEC =  $(INSTALL_DIR)/gprs
OBJS =  main.o tty.o gprs.o keyshell.o $(TOPDIR)/keyboard/keyboard.o $(TOPDIR)/keyboard/get_key.o

all: $(EXEC)

$(EXEC): $(OBJS)
    $(CC) $(LDFLAGS) -g -o $@ $(OBJS)  $(EXTRA_LIBS)

install:
    $(EXP_INSTALL) $(EXEC) $(INSTALL_DIR)

clean:
    -rm -f $(EXEC) *.elf *.elf2flt *.gdb *.o

执行make时,终端打印出如下信息:
armv4l-unknown-linux-gcc    -c -o main.o main.c
armv4l-unknown-linux-gcc    -c -o tty.o tty.c
armv4l-unknown-linux-gcc    -c -o gprs.o gprs.c
armv4l-unknown-linux-gcc    -c -o keyshell.o keyshell.c
armv4l-unknown-linux-gcc  -g -o ../bin/gprs main.o tty.o gprs.o keyshell.o ../keyboard/keyboard.o ../keyboard/get_key.o   -lpthread

前4条交叉编译语句是make根据依赖关系自动生成的,最后1条语句才是我自己写的(即Makefile中的$(CC) $(LDFLAGS) -g -o $@ $(OBJS)  $(EXTRA_LIBS))
由于在交叉编译main.o、tty.o、gprs.o和keyshell.o等目标文件时,没有加上-g选项。因此,即便你在将它们链接成可执行文件gprs时加上了-g选项,也还是会出现
“No symbol table is loaded.  Use the "file" command.”错误。因为main.o、tty.o、gprs.o和keyshell.o等目标文件并没有任何调试信息可输出给可执行文件gprs。
做人还是不能偷懒,老老实实把每个目标文件的编译语句写上并加上-g选项,问题就解决了。
阅读(4235) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~