交叉调试时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.makEXTRA_LIBS += -lpthreadEXEC = $(INSTALL_DIR)/gprsOBJS = main.o tty.o gprs.o keyshell.o $(TOPDIR)/keyboard/keyboard.o $(TOPDIR)/keyboard/get_key.oall: $(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.carmv4l-unknown-linux-gcc -c -o tty.o tty.carmv4l-unknown-linux-gcc -c -o gprs.o gprs.carmv4l-unknown-linux-gcc -c -o keyshell.o keyshell.carmv4l-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选项,问题就解决了。
阅读(4308) | 评论(0) | 转发(0) |