Windows 下 DLL、静态库的 lib 作用,4 种方法区分 Windows 的静态库 lib / DLL 导入 lib(从简单到专业)

📅 2026/7/6 14:05:17
Windows 下 DLL、静态库的 lib 作用,4 种方法区分 Windows 的静态库 lib / DLL 导入 lib(从简单到专业)
目录关键区分:Windows 下 DLL、静态库的 lib 作用1. 静态库 .lib(MT glog_static.lib 这种)2. 动态库 DLL 配套的 .lib(glog_dll.lib / yaml-cpp.dll.lib)编译阶段:必须要这个导入 lib,缺一不可运行阶段:完全不需要这个导入 lib,只需要 .dll3. 一句话总结补充误区澄清4 种方法区分 Windows 的静态库 lib / DLL 导入 lib(从简单到专业)方法 1:看文件名(最快,初步筛查)DLL 导入库特征静态库特征方法 2:看文件大小(肉眼快速分辨)DLL 导入库静态库方法 3:VS 自带工具 lib.exe 命令(100% 准确,推荐)操作步骤判断规则方法 4:dumpbin.exe 权威工具(最精准,专业排查)方式 A:查看导出符号(推荐)方式 B:查看库类型标识补充:结合你的项目快速校验极简总结判断口诀关键区分:Windows 下 DLL、静态库的 lib 作用1. 静态库.lib(MT glog_static.lib 这种)编译、运行全程只需要这一个.lib文件链接阶段会把库内全部代码、数据直接打包复制进你的 exe运行时不需要任何额外文件,单 exe 就能跑缺点:你现在遇到的/MT静态库和/MD动态 CRT 冲突根源就在这2. 动态库 DLL 配套的.lib(glog_dll.lib / yaml-cpp.dll.lib)编译阶段:必须要这个导入 lib,缺一不可例如:corelib为核心库时,当不存在lib时,无法生成依赖该库的其他dll,和最终的exe文件这个 lib不包含函数实现代码,只存 DLL 里函数的符号索引表,作用是告诉链接器: “这个函数不在当前工程,运行时去 xxx.dll 里加载” 没有它,编译直接报无法解析的外部符号 LNK2019。运行阶段:完全不需要这个导入 lib,只需要.dll程序启动后操作系统加载 DLL 文件,导入 lib 只在编译链接时生效,打包发布时可以删掉。3. 一句话总结表格库类型编译链接是否需要 lib运行程序是否需要 lib运行必须文件静态库 (.lib)✅必须❌不需要仅 exeDLL 动态库 (导入 lib+dll)✅必须导入 lib❌不需要导入 libexe + xxx.dll补充误区澄清不是有 DLL 就不用 lib:Windows 原生编译必须搭配导入 lib;Linux/Android .so 不需要配套 lib,这点不一样。导入 lib 体积通常很小,静态 lib