如何解决GDB找不到符号表
我无法确定gdb找不到正确的调试符号或者不是我的makefile生成它们的原因。我已经想到了尽可能多的组合来添加和删除各种标志,例如-g,-ggdb和-O0。任何帮助将不胜感激!
Makefile:
FLAGS =-std=c++11 -ggdb -g -O0 -Wall -Werror
CC = g++
OBJS = main.o LSorter.o LNode.o
default: exec
exec: $(OBJS)
$(CC) $(FLAGS) -o exec $(OBJS)
main: main.cpp LSorter.h LNode.h
$(CC) $(FLAGS) -c main.cpp -o main.o
LSorter: LSorter.cpp LSorter.h LNode.h
$(CC) $(FLAGS) -c LSorter.cpp -o LSorter.o
LNode: LNode.cpp LNode.h
$(CC) $(FLAGS) -c LNode.cpp -o LNode.o
clean:
rm exec $(OBJS)
控制台输出:
解决方法
OBJS = main.o LSorter.o LNode.o
exec: $(OBJS)
$(CC) $(FLAGS) -o exec $(OBJS)
这指定exec
目标取决于main.o
,LSorter.o
和LNode.o
目标。
然后,make
命令继续在您的Makefile中搜索用于构建main.o
,Lsorter.o
和LNode.o
的任何规则。
不幸的是,make
在这项崇高的追求中惨败。您的Makefile
无法为名为main.o
,Lsorter.o
和LNode.o
的目标定义任何规则。 make
然后默认使用其隐式规则,即从找到的具有相同名称的.o
文件中构建.cpp
文件。内置于make
中的默认内置规则完全不了解您的FLAGS
变量,并且如果您在编译{时密切注意了make
正在执行的命令,您会注意到{1}}文件没有cpp
编译过您的cpp
文件,因此没有编译任何调试数据。
您的makefile似乎确实为目标FLAGS
,main
和LSorter
定义了规则,这些规则使用LNode
指定FLAGS
选项。>
不幸的是,正如我所解释的那样,这些不是-g
被指示要搜索的目标。
这是明显的疏忽。更改构建规则以指定正确的依赖关系目标,然后make
并重新编译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。