使用库进行编译时,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不包含调试符号的主要内容,如果未能解决你的问题,请参考以下文章