使用库进行编译时,gcc不包含调试符号

时间:2013-11-04 21:24:14

标签: debugging gcc gdb debug-symbols

我遇到了一个奇怪的问题,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

那么,那里的任何大师,准备好表演他们的魔法? :)

1 个答案:

答案 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来编译其他人。