2

我遇到了 gcc 不产生调试符号的奇怪问题,非常感谢一些帮助。

诚然,我可能在这里做了一些愚蠢的事情,但我没有忘记 -g 或 -ggdb,而且我也没有在里面偷偷 -s。这是信息:

我有一个名为 list 的静态库(这是一项学校作业),以及两个以不同方式包含它的程序。

在 main(编译为fifo)列表中包含为#include "list.h",而在 prodcons 中,它包含为#include "list/list.h" 当我在编译文件上运行 gdb 时,prodcons我收到消息“未找到调试符号”,编译fifo文件也是如此。根据该file命令,两个文件都不会被剥离。

文件结构:

.
├── list
│   ├── list.c
│   ├── list.h
│   ├── main.c
│   └── Makefile
├── makefile
├── prodcons.c

为清楚起见,排除了 .o 文件和二进制文件。

以下是 make 文件: list/Makefile: all: fifo liblist.a

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

./makefile:

prodcons: prodcons.o 
    gcc -g -static -Wall -I./list -L./list -o $@ prodcons.o -llist -lpthread

clean:
    @@rm prodcons prodcons.o

那么,那里有任何大师,准备好施展他们的魔法了吗?:)

4

1 回答 1

0

您应该首先使用选项编译 lib,-g然后将 .o 文件链接到库中,如下所示:

list.o: list.c
     gcc -c -g list.c -o fax.o
liblist.a: list.o
     ar rcs liblist.a list.o

使用这个静态库来编译其他库。

于 2017-12-28T10:26:14.450 回答