动态链接库(project->settings->link)和包含库(#include)有什么区别?

来源:百度知道 编辑:UC知道 时间:2024/06/04 07:35:58
动态链接库(project->settings->link)和包含库(#include)有什么区别?请详细说明一下。

比如要用到一个库,里面有个函数 int hanshu();
函数申明在ku.h

包含库(#include)
#include "ku.h"
这样就可以使用hanshu()了

但是这只能通过编译,最后链接成可执行文件还需要hanshu()这个函数的具体实现,这个具体实现,比如在ku.lib里。
于是就要在project->settings->link里添加ku.lib,不然编译器不知道在哪里

没有"包含库"这个概念. 动态链接库是和静态链接库对应的, 他们都可能用到#include.

库编译后是二进制代码, 里面函数的按符号导出. 你的程序要调用库里的函数就要知道库导出函数的位置等信息,这些信息就保存在头文件的声明里, 通过#inlcude库提供的头文件就能把这些声明包含到你的程序里了, 这就是#include库头文件的作用.

比如C语言的标准输入输出库, 你要调用printf(), 编译器在链接时如何知道这个printf()是链接谁的呢, 就要通过你#include的stdio.h文件找到需要链接的代码位置, 将printf()的代码跟你的程序链接到一起.

库分动态库跟静态库, 静态库跟你的程序编译到一起, 而动态库则不直接跟你的程序编译到一起, 而是通过函数入口调用.

windows下的动态链接库还分显式链接跟隐式链接. 隐式链接是exe运行时就加载此动态库, 因为源代码包含了对库函数的调用, 所以需要#include和lib导入库. 而显式链接是通过函数入口地址调用函数, 是不用#include头文件的.

所以综上所述, 动态库,静态库跟#include只能说"联系"而不能说"区别". 除了windows下的"显式链接动态库", 都是需要#include头文件的.