一、库文件:
1.定义: 库文件指事先将写好的预编译指令封装成库,在使用某些功能时就不需要重新写入,调用库文件就行。
2.分类:库文件可分为静态库和动态库。在window下,静态库的扩展名为.lib文件,动态库(共享库)为.DDL文件;Linux下静态库文件扩展名为.a,动态库文件的扩展名为.so文件。
3.静态库
- 特点:程序在链接时,链接器在库文件获取需要的代码,复制到生成的文件中。所以在程序链接阶段被复制到程序中,和程序的执行过程没有关系。
- 创建步骤:
eg: 有两个源文件为main.c和test.c文件
gcc -c main.c test.c ——>main.o test.c 使用ar将目标文件归档:ar crv libname.c main.o test.o
libname.a为创建的静态库。
4.动态库
- 特点:动态库在连接阶段并未加载到程序中,而是程序在运行时被系统动态加载到内存中使用。
- 创建步骤:
eg:有源文件main.c
gcc -fPIC -shared -o libname.so main.c //这行代码可以分两步执行: gcc -c -fPIC main.c gcc-shared -o libname.so main.c
libname.so为创建的动态库
5.动态库与静态库的区别
静态库链接过程中拷贝了一份库文件代码,而动态库是在系统运行时将库文件代码加载到内存中。如果多次使用静态库文件,就会拷贝多次,占用内存,浪费空间; 动态库只需加载一次,不同程序可以得到内存中相同动态库文件的副本,节省内存。
二、Makefile文件
1.makefile主要包括显示规则、隐晦规则、变量定义、文件指示和指示五个方面的内容。
2. 定义:系统规则,哪些文件需要先编译、后编译或重新编译。
3.优点:提高了软件编译效率;提高开发人员的工作效率;make一次写好,永久使用。
4. 功能:这个事关工程的编译规则,执行操作系统的命令。实现自动化编译,提高编译效率(只会编译修改的和依赖于修改的 文件)
5.工作原理:make是解释Make file 的指令工具;当我们输入make时:
- make首先会在当前目录下找Makefile文件;
- 如果找到,他会选择文件中的一个目标文件main,并把main文件作为最终目标文件;
- 如果main文件不存在或main后面依赖的.o文件的修改时间要比main文件新,那他会执行后面所定义的命令生成main文 件;
- 如果main 依赖的.o文件存在,make会在当前文件中找目标为.o文件的依赖性,如果找到在根据规则生成.o文件;
- 因为.c文件和.h文件存在,make会生成.o文件,然后再用。o文件声明make的最终文件,即执行文件main;
6. make与Makefile的区别
make是一个命令,Makefile是一个文件;当Makefile文件写好后,只需make将Makefile运行起来。 三、linux下文件操作函数与系统调用函数
文件操作函数:open read write close lseek stat
int open(char *path,int flag)//打开一个普通文件 ,打开成功返回文件描述符
int read(int fd ,void *buff,size_t size) //按字节读取文件内容
int write(int fd ,void *buff,size_t size) //按字节将内容写入文件中
int close(int fd)//关闭打开的文件
int lseek(int fd,int size,int flag) //移动读文件偏移量
三个stat函数获取文件属性信息
int stat(char *path,struct stat *st);
int fstat(int fd,struct stat *st);
int lstat(char *path,struct stat *st);