我正在学习Linux,我的第一步是调整我的project在linux上运行。这里是简单的makefile(主要用于教育目的),它生成了文件:
#------------------------BUILD VARIABLES-----------------------------
# Directories, containing headers
INCLUDE_DIR = ../Include/
# Output directory which will contain output compiled file
OUTPUT_DIR = ../Bin/Debug/
SOURCES = EngineManager.cpp Geometry.cpp Main.cpp Model.cpp \
Shaders.cpp TGAImage.cpp
HEADERS = EngineManager.h Geometry.h Line.h Model.h Shaders.h \
TGAImage.h Triangle.h
#------------------------BUILD_RULES---------------------------------
TinyRenderBuilding : $(addprefix $(INCLUDE_DIR), $(HEADERS)) $(SOURCES)
mkdir -p $(OUTPUT_DIR)
g++ -std=c++14 -o $(OUTPUT_DIR)TinyRender.out -g -I$(INCLUDE_DIR) $(SOURCES)
字符串
我不明白,为什么g++
不生成调试符号?出现-g
选项
4条答案
按热度按时间qmb5sa221#
要在使用
g++
编译时包含调试符号,需要传递-g
选项。在make make文件中,这通常意味着将其添加到
CXXFLAGS
。在创建可执行文件时,还要确保传递
-g
选项:编译时将.cpp
文件转换为.o
文件,链接时将这些.o
文件转换为可执行文件。如果在再次运行
make
之前更改了选项,请确保运行make clean
cause,否则它将无法重新编译。最后,确保您没有在可执行文件上运行
strips
命令等额外步骤(这将删除调试符号)。您可以使用
字符串
检查可执行文件是否有符号。
当它没有符号时,它会说:
型
(我不是C / C++编程的Maven,我只是在调试别人的代码时遇到了这个问题)
gj3fmq9x2#
根据你的makefile,
g++
应该会产生调试符号(显示-g
选项)。要确认这一点,你可以在产生的二进制文件上运行file
:字符串
(Note
with debug_info
输出中的字符串)w9apscun3#
我不太确定,但是你可以试试-g或者-ggdb。你可以对它们做一些研究。我们用gdb工具来调试C程序时使用了这些参数。
dohp0rv54#
确保您没有为
ld
或LDFLAGS
设置-s
选项字符串