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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用库进行编译时,gcc不包含调试符号相关的知识,希望对你有一定的参考价值。

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

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

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

在main(编译为fifo)列表包含为#include "list.h",而在prodcons中,它包含为#include "list/list.h"当我在编译文件prodcons上运行gdb时,我收到消息“找不到调试符号”,编译的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

所以,那里的任何大师,准备好表现他们的魔力? :)

答案

您应该首先使用-g选项编译库,然后将.o文件链接到库中,不管怎么说:

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

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

以上是关于使用库进行编译时,gcc不包含调试符号的主要内容,如果未能解决你的问题,请参考以下文章

GCC 编译详解

Xcode LLVM+GCC 4.2 - 生成调试符号

visual studio 怎么使用pdb进行调试

Linux(程序设计):05---gcc的基本用法

是否有 GCC 编译指示可以覆盖某些代码段的调试信息 (-g) 的生成?

指针与数组的缘定今生