Linux GCC编译、gdb调试、makefile、动态链接库的创建

学习了一段时间的Linux 系统编程来总结总结,GCC的一些相关知识。比如GCC编译,gdb调试器的使用,makefile的编写等等知识点。这些都是最最基础的知识了,hh。还有出现segment fault段错误是gdb的用处就很大了,gdb core能直接定位到段错误发生位置。

1.GCC编译

1.预处理编译汇编链接
预处理: gcc -E main.c  得到文件main.i,是将define的宏定义进行展开
编译: gcc -S main.i 得到main.s,得到汇编文件加入头文件内容
汇编:as main.s -o main.o  得到.o机器码文件
链接:gcc -o main main.o 得到可执行的main文件,接入库函数以及引导代码

gcc -c main.c main.o  直接得到.o文件
gcc -o main main.o 得到执行文件
或者
gcc main.c -o main直接得到可执行文件

GCC还有3级的编译优化,不再赘述。

2.gdb调试

gcc -g main.c -o main 将调试信息加入到可执行文件中
gdb main 对执行文件调试
进入·gdb 模式后:
熟悉这些用到的命令:

b 行数、函数名称   加断点
r  运行,进入主函数
n 跳过函数进行下一步
s 进入函数    
p  I  打印变量I的值
finish 跳出函数
c  return
q  退出gdb模式

额外补充一点: segment fault段错误
一般是指针错误,比如访问未定义的指针地址
char *p=NULL;
*p=’c’; //segment fault
(注释: p=”string”,直接传递地址是没有错误的)

如果存在段错误,gcc -g main.c -o main
执行./main 文件,同级目录下产生core文件保存了段错误的发生位置。
gdb core 进入调试模式,r运行,直接跳转到段错误发生语句。

如果没有产生core文件:
ulimit -a   查看core size,默认为0?
ulimit -c unlimited  将core size设置为unlimited

3.make工程管理

管理同一工程较多文件时,通过判断文件是否被修改再进行编译链接,这样当整个项目只修改了少数文件是,节省了很大的时间。
makefile:

SOURCES:=$(wildcard *.c)
OBJS:=$(patsubst %.c,%.o,$(SOURCES))
final:=main
CC:=gcc
CFLAGS:= -g -Wall
$(final):$(OBJS)
    gcc -o $@ $^
.PHONY:clean
clean:
    rm $(final) $(OBJS)

make .c 转化为 .o 汇编文件 生成可执行文件main
CC参数、CFLAGS参数可以不进行设置。

4. .so链接库的创建

例如:add.c 是包含一些函数功能的文件

gcc -fPIC -Wall -c add.c
gcc -shared -o libadd.so add.o
(注释:区别静态链接库lib 命令:ar crsv  libadd.a   add.o)
将得到的动态链接库文件libadd.so加入/usr/lib当中即可
编译运行:
gcc -o main main.c -L. –ladd
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值