【问题标题】:GDB no debugging symbols foundGDB 没有找到调试符号
【发布时间】:2013-11-28 08:34:12
【问题描述】:

我正在尝试编译一个由两个源文件组成的程序: 通配符trie.h,通配符trie.cpp 使用 Makefile。但是,当我运行 GDB 进行调试时,出现以下错误:

Reading symbols from /home/meric/Documents/Random/SectionLeading/wildcardtrie...(no    debugging symbols found)...done.

我尝试了许多不同的编译器标志,但都没有奏效。令我困惑的是,我在其他程序中使用了几乎相同的 Makefile,而缺少符号从来都不是问题。我在下面包含了 Makefile:

CC=g++  
CFLAGS = -g -ggdb g++ -O0 -Wall -Wfloat-equal -Wtype-limits -Wpointer-arith -Wlogical- op -fno-diagnostics-show-option 

LDFLAGS = -g -ggdb -std=c++0x 


programs = wildcardtrie


all : $(programs)

clean:
     rm -f $(programs) core *.o

.PHONY: clean all

我尝试在编译器和链接器标志中删除“-g”和“-ggdb”,但似乎没有任何效果。当我调用“make”时,我在终端上得到以下输出:

g++    -c -o wildcardtrie.o wildcardtrie.cpp
g++  -g -ggdb -std=c++0x   wildcardtrie.o   -o wildcardtrie

任何帮助将不胜感激!

【问题讨论】:

  • 在构建 C++ 程序时,make 使用 CXXCXXFLAGS 变量。
  • 另外,同时拥有-g-ggdb 是多余的。
  • 您还需要将链接器更改为g++LD = g++
  • 当你在控制台中运行make 时,你会得到很多输出。请在运行 make clean 后在问题中包含该输出。
  • 我认为你真的需要阅读更多关于make的信息。 make clean 中的 clean 调用 makefile 中的 clean 目标。

标签: c++ debugging makefile gdb g++


【解决方案1】:

g++ -c -o wildcardtrie.o wildcardtrie.cpp

这清楚地表明-g 不在您的编译行中(这正是您的问题的原因)。

要在那里获得-g,要么将其添加到CXXFLAGS(这是首选解决方案),要么只显式编写编译规则(而不是依赖内置的make规则):

wildcardtrie.o: wildcardtrie.cpp
        $(CC) $(CFLAGS) -o wildcardtrie.o wildcardtrie.cpp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多