函数和数据被编译进一个二进制文件(一般扩展名为.LIB)。程序员
静态库:windows
在使用静态库的状况下,在编译连接可执行文件时,连接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来建立最终的可执行文件(.EXE文件)。在多个一样的程序执行时,系统保留了许多重复的代码副本,形成内存资源浪费。函数
动态库:接口
使用动态库时,有一个引入库lib和一个DLL。引入库lib包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译连接可执行文件时,只须要连接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。使用DLL的动态连接并非将库代码拷贝,只是在程序中记录了函数的入口点和接口,在程序执行时才将库代码装入内存;无论多少程序使用DLL,内存中都只有一个DLL的副本;当没有程序使用它时,系统就将它移出内存,减小了对内存和磁盘的要求。内存
静态库中不能再包含其余的动态或静态库,而动态库则能够。资源
编译器寻找库文件的顺序是编译器
一、程序员指定的库文件目录编译
二、当前工程的工程目录class
三、windows目录变量
四、system32
五、系统的环境变量
待续,而后接着说动态连接库加载的隐式连接和显式连接。