Visual Studio 2015 下静态和动态编译 SQLite3 及使用
可使用免费的 Visual Studio Community 版本:https://www.visualstudio.com/products/visual-studio-community-vs
个人使用完全足够了
去 SQLite 官网下载 SQLite3 的源代码:https://www.sqlite.org
例如我下载的是 sqlite-amalgamation-3081101.zip
解压之后会发现有 4 个文件,但是我们只需要 sqlite3.c 和 sqlite3.h
以下编译 SQLite3 和使用 SQLite3 我是分开使用两个解决方案,为了理解起来清晰一点
但是最好将其放一个解决方案中,内分为两个项目,有利于代码的组织
静态编译 SQLite3
-
打开 VS 2015, 新建项目
依次选择:已安装 → 模板 → Visual C++ → Windows → Win32 → Win32 项目
在下面选择好位置,输入名称,点击「确定」 -
然后会进入 Win32 应用程序向导
点击「下一步」,在「应用程序类型」选择「静态库」,在「附加选项」中将「预编译头」去掉
最后点击「完成」,如下图所示
-
将 sqlite3.c 和 sqlite3.h 复制到项目目录下,然后将其添加到项目
-
在「解决方案资源管理器」中选中当前项目,然后依次点击上面菜单栏中的
项目 → 属性,进入项目属性页
将上面的配置选成 “Relase”, 然后依次进入,配置属性 → C/C++ → 代码生成 → 运行库,选择「多线程 DLL(MD)」
需要注意的一点是,同个解决方案内有多个项目,必须选择相同的运行库
-
点击,生成 → 配置管理器,将「活动解决方案配置」选为 “Relese”
-
点击,生成 → 生成解决方案
-
静态库已生成,在项目目录 Release 文件夹下,一个 .lib 文件
该 lib 包含函数代码本身(即包括函数的索引,也包括实现),在其它项目编译引用时只需要将该 .lib 和 .h 文件加入程序当中即可
选择 “Relese” 还是 “Debug” 按情况而定,如果项目需要发布了,那么选择 “Relese” 会更好,如果需要调试,那么选择 “Debug” 会更好。但是确保同一解决方案下的各项目要统一
在 MFC 中使用 SQLite3 静态库
**注意:**开发全新的 PC 桌面客户端请不要使用 MFC, 已经是过时的技术了。有了坑爹的学校,才有了我去用 MFC
请使用 Qt, C# WPF, Node-Webkit 等
我们需要 .lib 和 .h 文件
新建一个项目,模板 → Visual C++ → Windows → MFC → MFC 应用程序
应用程序类型,我们选择「基于对话框」,看起来会简单一点,其它默认即可
-
将上一步编译好的 .lib 文件和源代码中的 .h 文件放到项目目录中,然后添加到项目中
好一点的做法是,在项目目录中建立 sqlite3 文件夹,然后将两个文件放到这里
比如说名为 sqlite3.lib 和 sqlite3.h -
比如说在主 Dlg 文件 MFC-SQLite3Dlg.h 确定按钮写入如下简单使用 SQLite3 的代码
#include "SQLite\sqlite3.h" void CMFCSQLite3Dlg::OnBnClickedOk() { ::sqlite3 *db = NULL; int ret; ret = ::sqlite3_open("data.db", &db); if (ret == SQLITE_OK) { MessageBox(_T("数据库打开成功")); } else { MessageBox(_T("数据库打开失败")); } CDialogEx::OnOK(); }
然后生成该项目就可以了
使用静态库非常简单,只需将 .lib 和 .h 文件添加到项目即可
动态编译 SQLite3
动态编译和静态编译差不多,只有两个地方不一样
-
项目属性页 → 配置属性 → 常规 → 项目默认项 → 配置类型,选择「动态库(.dll)」
-
需要模块定义文件 .def, 可从 SQLite 官网下载,例如 sqlite-dll-win32-x86-3081101 内有 .dll 和 .def 两个文件,但是我们只需要 .def
当然你也可以自己编写 .def 文件,定义导出函数,比较懒就用现成的吧所以你总共需要 3 个文件,.c, .h, .def, 分别将其添加到项目
项目属性页 → 配置属性 → 链接器 → 输入 → 模块定义文件,写入模块定义文件 sqlite3.def
生成项目,即可得到 .dll 和 .lib 文件
有可能会提示你,无法解析的外部符号,不要急,将那些导出函数删除即可
或者利用官方提供的 .dll 和 .def 文件生成 .lib
下载官方提供的文件 sqlite-dll-win32-x86-3081101, 内有 sqlite3.def 和 sqlite3.dll 这两个文件
-
将 .def 和 .dll 文件放到 SQLite3-Dynamic 文件夹中(随便)
-
将下面三个文件放到 SQLite3-Dynamic 文件夹中
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\lib.exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\link.exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\mspdb140.dll
-
使用命令提示符,进入 SQLite3-Dynamic 文件夹,执行如下命令:
LIB /DEF:sqlite3.def /machine:IX86
即可生成 .lib 文件
在 MFC 中使用 SQLite3 动态库
我们需要 .dll, .lib, .h 文件
和使用 SQLite3 一模一样,生成项目只需要 .lib 和 .h 文件,但是程序运行需要 .dll 文件