sqlite3.def 模块定义文件
Windows平台 模块定义文件(Module‑Definition File),纯文本文件,运行程序完全不需要它,只用于C/C++开发编译阶段。 官方dll压缩包
sqlite‑dll‑win64‑x64‑xxx.zip里面只有两个文件:
sqlite3.dll:真正运行时动态库sqlite3.def:导出函数列表文本文件
打开 sqlite3.def,可以看到内容格式:
LIBRARY sqlite3.dll
EXPORTS
sqlite3_aggregate_context
sqlite3_aggregate_count
sqlite3_bind_blob
sqlite3_bind_double
......作用:列出 dll 对外暴露的全部 C API 导出函数名。
核心用途
用来生成导入库 sqlite3.lib。 C/C++ VS开发,隐式链接sqlite3.dll的时候,编译需要 .lib 文件;官网不直接提供lib,要用 def 生成。
VS开发人员命令提示符生成 lib
打开 x64 Native Tools Command Prompt for VS,进入文件目录执行:
cmd
lib /def:sqlite3.def /machine:x64 /out:sqlite3.lib执行完成输出两个文件:
sqlite3.lib:导入库(很小,几十KB,不是静态库),编译链接用sqlite3.exp:导出辅助文件,一般可以删掉
注意:这个 sqlite3.lib 只是导入库,不是把sqlite代码打包进exe;程序运行依旧必须携带
sqlite3.dll。
MinGW 环境
cmd
dlltool --def sqlite3.def --dllname sqlite3.dll --output-lib sqlite3.a只有dll,丢失def怎么办
用 VS dumpbin 从 dll 反向导出 def 文件:
cmd
dumpbin /exports sqlite3.dll > sqlite3.def手动简单修整格式后,就可以继续用lib命令生成lib。
哪些场景你完全不需要 sqlite3.def
- 使用
sqlite3.exe命令行工具; - Rust rusqlite(bundled模式内置编译sqlite源码,不依赖dll;系统模式会加载dll,但rust工具链不需要def);
- Python ctypes、C# P/Invoke,运行时LoadLibrary动态加载dll,不需要def/lib文件;
- 直接复制db文件、使用 sqlite3_rsync、sqldiff、sqlite3_analyzer 全套工具;
✅ 简单记:只有写C/C++原生程序,隐式链接sqlite3.dll的时候才碰sqlite3.def;普通使用SQLite完全不用管这个文件。
SQLite Windows官方包全部文件总览
- sqlite‑tools‑win64‑x64.zip(工具包)
- sqlite3.exe:交互终端
- sqlite3_rsync.exe:快照备份
- sqldiff.exe:库差异对比
- sqlite3_analyzer.exe:存储分析
- sqlite‑dll‑win64‑x64.zip(动态库包)
- sqlite3.dll:动态库
- sqlite3.def:模块定义文件(开发编译用)
- sqlite‑amalgamation‑xxx.zip(源码包)
- sqlite3.c、sqlite3.h:合并版源码,可以直接静态编译进程序。
rusqlite 的
features = ["bundled"]就是内部使用 sqlite3.c 源码编译,不需要 dll、def、lib 任何文件。