一、库的类型 (库即为源代码的二进制文件)
(一) 在windows中 ( .lib 静态库    .dll 动态库)
(二) 在linux中 (.a   静态库    .so 动态库)
(三) 静态库和动态库的优缺点
***静态库,程序build时用    VS    动态库,程序run时用

静态库,占内存,程序运行快
动态库,省内存,程序启动运行相对慢一点
当前开发环境用的是动态库  .so  (主要是要修改库文件代码方便一些)

当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中。
这就会导致最终生成的可执行代码量相对变多,相当于编译器将代码补充完整了,这样运行起来相对就快些。
不过会有个缺点: 占用磁盘和内存空间. 静态库会被添加到和它连接的每个程序中, 而且这些程序运行时, 
都会被加载到内存中. 无形中又多消耗了更多的内存空间.

 与共享库连接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时,
 那些需要的函数代码才被拷贝到内存中。这样就使可执行文件比较小, 节省磁盘空间,更进一步,
操作系统使用虚拟内存,使得一份共享库驻留在内存中被多个程序使用,也同时节约了内存。
不过由于运行时要去链接库会花费一定的时间,执行速度相对会慢一些,总的来说静态库是牺牲了空间效率,
换取了时间效率,共享库是牺牲了时间效率换取了空间效率,没有好与坏的区别,只看具体需要了。

 另外,一个程序编好后,有时需要做一些修改和优化,如果我们要修改的刚好是库函数的话,
在接口不变的前提下,使用共享库的程序只需要将共享库重新编译就可以了,
而使用静态库的程序则需要将静态库重新编译好后,将程序再重新编译一便。

(四)如何知道一个可执行程序依赖哪些库
ldd命令可以查看一个可执行程序依赖的共享库,

(五).在新安装一个库之后如何让系统能够找到他
如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。
如果安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下

1.编辑/etc/ld.so.conf文件,加入库文件所在目录的路径

2.运行ldconfig,该命令会重建/etc/ld.so.cache文件