库文件分类(只能使用功能,不能看到原码,保存函数和变量,只能使用不能看到其实现 )
SDK开发包:库文件+开发工具
静态库:在编译时加载(内存大)
动态库:在运行时加载(内存少)
库文件存放位置:/lib;/usr/lib(第三方软件)
设置库文件步骤:
gcc -c add.c
gcc -c sub.c
ar(工具) -rcs(工具选项) libcal.a add.o sub.o
gcc main.c -lcal -L.-o cal
./cal
使用静态库和动态库编译可执行文件的优缺点?
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在
当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,
所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记‘
指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,
如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
二、调试器gdb
1、启动被调试的程序;
2、设置断点,单步执行;
3、查看变量的值;
查看源代码:gdb+可执行文件±-tui
layout split ;layout src;layout asm;
断点:break+行号
break+行号+条件
break+函数名
info break;
delete+断点编号
disable+断点编号
inable+断点编号
clear+行号
运行命令:
run:运行程序
next(不进入子函数)、step(进入子函数)
continue:继续运行直到程序结束;(再次遇到断点还会停止运行)
四、工程管理器make
1、什么是工程?很多文件构成的软件代码------10000个.c文件如何编译?工程管理器
作用?自动编译、管理代码
makefile规定了如何自动编译
脚本文件:批处理
脚本编程–测试、运维
Makefile三要素:目标、依赖、命令
目标+:+依赖 换行tab命令