linux 系统编程-学习笔记6-main函数/atexit函数/动态库、静态库/


_________________________________________________________________________________________________________
main函数【进程】结束,会做那些事情?
exit/return
exit(0)/return 0 ;  正常返回
exit(-1)/return -1; 异常返回
================================================
1.刷新所有的缓冲区
2.关闭所有打开的文件描述符
3.调用注册清理函数
int atexit(void (*function)(void));
通过atexit注册清理函数
==>exit/return之后调用清理函数function


void (*function)(void) :函数指针=>用于接受函数返回的地址


void gameover(void)
{

}
atexit(gameover);
int atexit(void (*function)(void));
{

}
========================================================


如果调用_exit/_Exit()退出,则不会做以上三件事情
 
预处理 ==》汇编==》编译==》链接


静态库和动态库
静态库:xxx.a(以.a为后缀)
1.在编译的时候把相关的库文件一起编译到可执行文件中
1)可执行文件再执行的时候不依赖相关的库文件(静态库的路径可随意改变)
2)可执行文件较大
3)每次升级都需要重新编译(升级不方便)
2.制作一个静态库文件
1)gcc -O -c *.c  ==>.o文件(目标文件)
2)ar -rsv xxx.a *.o
3)gcc -o main main.c ./xxx.a (main:可执行文件)


动态库:xxx.so (以.so为后缀)
1.在编译的时候没有把相关的库文件一起编译到可执行文件中
1)可执行文件再执行的时候依赖相关的库文件(动态库的路径不能改变)
2)可执行文件较小
3)每次升级都不需要需要重新编译(升级方便)


2.制作一个动态库文件
1)gcc -O -c *.c  ==>.o文件(目标文件)
2)gcc --shared -o xxx.so *.o
3)gcc -o main main.c ./xxx.so (main:可执行文件)

-fPIC: 位置无关码
gcc --shared -fPIC -o lib.so *.o



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值