13

我正在尝试使用调试符号编译我的程序以在 gdb 中使用。我已将 -g 标志添加到我的 makefile 中,但是当我在 gdb 中加载程序时,我仍然得到“正在从...读取符号(未找到调试符号)”。怎么了??

这是我的 makefile 的精简示例,它应该具有相关位:

CPP = g++
CFLAGS = -c -g -Wall

$(BIN): $(OBJ)
 $(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)

<test.o>: <test.cpp>
 $(CPP) $(CFLAGS) <test.cpp> -o <test.o>

如果你想看到整个事情,你可以去这里,虽然我认为没有必要:

http://pastebin.com/vGNjy0ga

杂项注释.. 我在 Windows 上使用 MinGW 进行编译,并且我有 SFML 和 OpenGL 作为依赖项。

不, -s 标志在我的 makefile 中找不到。

4

6 回答 6

6

啊。我很抱歉。事实证明,我的 makefile 的“干净:”部分已损坏。因此,当我使用 make clean 时,什么也没发生。手动删除 .o 文件可解决问题。标志现在可以正常工作。感谢所有发布的人!现在可以删除了。

于 2010-12-31T06:36:39.427 回答
5

使用我在一些旧 F77 代码上继承的 makefile 时,我遇到了同样的问题。我尝试了人们推荐的所有标志(-g -ggdb ...等)运行解决方案make clean 如果您没有那个或知道它的含义,基本上删除所有编译的(.o)文件。

makefile 不知道要重新编译,因为只更改了标志,所以当我认为是时,我实际上并没有使用 -g 或 -ggdb 进行编译。希望这对某人有帮助!

于 2014-07-23T15:14:37.433 回答
1

我认为-g在将对象链接到二进制代码时需要。

CPP = g++
CFLAGS = -g -Wall

$(BIN): $(OBJ)
 $(CPP) $(CFLAGS) $(OBJ) -o $(BIN) $(LDFLAGS) $(LIBS)

<test.o>: <test.cpp>
 $(CPP) $(CFLAGS) -c <test.cpp> -o <test.o>
于 2010-12-31T06:39:52.890 回答
1

尝试更换

$(BIN): $(OBJ)
 $(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)

$(BIN): $(OBJ)
 $(CPP) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS) $(LIBS)

(编辑)注意:-c 选项不适用于可执行文件

于 2010-12-31T06:21:28.877 回答
1

我对 Mingw 没有太多经验,但尝试用 -ggdb 替换 -g。这可能会解决您的问题。根据 gcc 手册页

生成供 GDB 使用的调试信息。这意味着使用最具表现力的可用格​​式(DWARF 2、stabs 或本机格式,如果它们都不支持),如果可能的话,包括 GDB 扩展。

于 2010-12-31T06:31:27.373 回答
0

我不确定,但我认为即使在链接时你也需要 -g 。

于 2010-12-31T06:14:57.023 回答