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

来源:互联网 发布:python gnuradio 编辑:程序博客网 时间:2024/05/08 13:37

_________________________________________________________________________________________________________
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