静态库:在编译过程中将所有函数载入,体积大
- 静态库的产生:
- 由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表
- ar命令将很多.o转换成.a,成为静态库
- 静态库的命名:一般为libxxxx.a,其中xxxx是该lib的名称
- 静态库的生成与使用(举例):
- 需要头文件hello.h,源程序hello.c,主程序main.c,都放在同一文件夹testit中
- 通过以下命令生成hello.o文件
- 创建静态库文件libmyfile.a
- 连接静态库文件生成目标程序
-static :表示程序的静态链接
-lmyfile:链接静态库myfile
-L. :链接时需指明静态库所存在的路径,‘.’表示当前路径
- 需要头文件hello.h,源程序hello.c,主程序main.c,都放在同一文件夹testit中
动态库:在可执行程序运行时才载入,体积小
- 动态库的产生:动态库的后缀是.so,它由gcc加特定参数编译产生
- 动态库的命名:一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号
- 动态库的生成与使用(举例):
- 头文件hello.h,源程序hello.c,主程序main.c与静态库一样
- 生成hello.o文件的操作与静态库一样
- 通过以下操作生成动态库libmyfile.so:
- 通过以下操作生成可执行文件hello:
- 但直接执行文件会出错,因为找不到libmyfile.so这个库,系统默认在系统的库文件夹里面搜索。懒得去改动系统文件
(其实是没找到),所以我们在每次执行的时候都执行一段语句指定动态库路径。下面给出执行错误和指定路径运行的情况:
这里的".“是相对路径,可以用”…"表示上一级文件夹,诸如此类