Windows
静态库:函数和数据被编译进一个二进制文件(.lib)(一个或多个obj文件打包),在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.exe)。
动态库:使用动态库时,往往提供两个文件:引入库(后缀也为.lib)、动态链接库(.DLL)。引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不可复制到可执行文件中,在运行时,再去加载DLL,访问DLL中导出的函数。
隐式调用:在编译/链接阶段完成,由编译系统根据动态库的头文件和库文件进行编译和链接,即需要将引入库加入到应用程序的工程中,从而确定待调用的的函数原型和地址。
显示调用:利用API函数实现加载和卸载DLL,获取调用函数地址获取错误信息等功能。
Linux
静态库:与Windows下的静态库类似,后缀名为.a。
动态库:与Windows下动态库类似,没有引入库,后缀名为.so。
隐式调用:编译可执行程序时需要指定库文件的搜索路径。
显式调用:显式调用编译可执行程序时不用加上动态库的搜索路径(因为已经在主函数中包含了库文件的路径),但是需要增加几个系统调用。