在c/c++程序执行中,需要用到各种提前写好的函数或方法,避免程序员每次都费力地编写常用的代码。这里的提前写好的函数的集合就是库文件了。库文件分为两类,静态库和共享库。静态库在每次代码编译时直接加进代码里,作为可执行程序的一部分,以.a来表示。共享库不加入程序中,只在程序运行时调动使用,以.so表示。
下面分别制作一个简单的静态库和共享库
创建.c文件
![](https://i-blog.csdnimg.cn/blog_migrate/b79738c1a6dce43b1f9bbf0119aee8ee.png)
一步步编译生成.o文件
![](https://i-blog.csdnimg.cn/blog_migrate/7544591d82c14db22d68f6a398aedec9.png)
用ar crv libxx.a xx.o格式的命令生成.a格式的静态库
![](https://i-blog.csdnimg.cn/blog_migrate/d8352bf5e01735788034d6b2cc2a5b46.png)
-c(create)如果不存在则创建,不发出ar警告。
-r(replace)表示当插入add.o已存在同名文件则覆盖。
引用时使用命令 gcc -o file file.c -E. -lxxx命令
-E.表示在当前目录下查找,这里有一个.
-lxxx表示连接该静态库,lib和.a可省略不写
有时会加-static参数表示运行时不需要再次链接
共享库
同样需要.o文件
![](https://i-blog.csdnimg.cn/blog_migrate/133b740ea5eec26df89d77320ac0512b.png)
用.o文件通过命令 gcc xx.o -fPIC -shared -o libxx.so.xx.xx格式命令生成共享库。
![](https://i-blog.csdnimg.cn/blog_migrate/d5b1916dcce6612a31d2df92acae71ea.png)
然后将库文件放入/lib或/usr/lib的LD_LIBRARY_PATH中
可以使用命令export LD_LIBRARY_PATH=.:%LD_LIBRARY_PATH