我正在尝试使用调试符号编译我的程序,以便在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>
如果你想看到整个事情,你可以去这里,虽然我不认为这是必要的:
杂项说明..我在Windows上使用MinGW进行编译,我将SFML和OpenGL作为依赖项。
不,在我的makefile中找不到-s标志。
答案 0 :(得分:5)
稀释。我非常抱歉。事实证明我的makefile中的“clean:”部分已被破坏。因此当我使用make clean时没有任何事情发生。手动删除.o文件修复了问题。旗帜现在完美运作。感谢所有发布的人!现在可以删除它。
答案 1 :(得分:4)
使用我在某些旧F77代码上继承的makefile时遇到了同样的问题。我尝试了人们推荐的所有标志(-g -ggdb ......等) 解决方案是 make clean 如果您没有或知道它意味着什么,基本上删除所有已编译的(.o)文件。
makefile不知道重新编译,因为只更改了标志,所以当我想到的时候,我实际上并没有使用-g或-ggdb进行编译。希望这有助于某人!
答案 2 :(得分:1)
尝试替换
$(BIN): $(OBJ)
$(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)
与
$(BIN): $(OBJ)
$(CPP) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS) $(LIBS)
(编辑) 注意:-c选项不适用于可执行文件
答案 3 :(得分:0)
我不确定,但我认为即使在链接时你也需要-g。
答案 4 :(得分:0)
我对Mingw没有太多经验,但尝试用-ggdb替换-g。这可以解决您的问题。根据gcc手册页
生成调试信息以供使用 由GDB。这意味着使用最多 表达格式(DWARF 2, stabs,如果两者都不是本机格式 其中包括GDB 如果可能的话扩展。
答案 5 :(得分:0)
我认为在将对象链接到二进制代码时需要-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>