我遇到了一个奇怪的问题,gcc没有生成调试符号,非常感谢一些帮助。
当然,我可能在这里做了一些愚蠢的事,但我没有忘记-g或-ggdb,我也没有在那里偷了一个-s。这是信息:
我有一个名为list的静态库(它是一个学校作业),还有两个以不同方式包含它的程序。
在main(编译为fifo
)列表中包含#include "list.h"
,而在prodcons中,它包含在#include "list/list.h"
中
当我在编译文件prodcons
上运行gdb时,我收到消息“找不到调试符号”
编译的fifo
文件也是如此。根据{{1}}命令,两个文件都不会被剥离。
文件结构:
file
为清晰起见,.o文件和二进制文件被排除在外。
以下是make文件: 列表/ Makefile文件: all:fifo liblist.a
.
├── list
│ ├── list.c
│ ├── list.h
│ ├── main.c
│ └── Makefile
├── makefile
├── prodcons.c
./生成文件:
OBJS = list.o main.o
LIBS= -lpthread
fifo: ${OBJS}
gcc -o $@ ${OBJS} ${LIBS} -ggdb
liblist.a: list.o
ar rcs liblist.a list.o
clean:
rm -rf *o fifo
那么,那里的任何大师,准备好表演他们的魔法? :)
答案 0 :(得分:0)
您应首先使用-g
选项编译lib,然后将.o文件链接到库中,不管这样:
list.o: list.c
gcc -c -g list.c -o fax.o
liblist.a: list.o
ar rcs liblist.a list.o
使用这个静态lib来编译其他人。