sqlite3.dll动态链接库,允许程序共享执行特殊任务所必需的代码和其他资源。
动态的sqlite3.lib相当于一个.h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,其生成的sqlite3.exe在运行时需要相应的.dll文件支持。
静态的sqlite3.lib将导出声明和实现都放在.lib中,编译后所有代码都嵌入到宿主程序,其生成的sqlite3.exe可直接运行。
以编译生成x64位的为例。下载文件:https://www.sqlite.org/download.html
sqlite-amalgamation-3280000.zip (包含文件:shell.c, sqlite3.c, sqlite3.h, sqlite3ext.h),
sqlite-dll-win64-x64-3280000.zip (包含文件:sqlite3.def, sqlite3.dll)
需要使用VS2017的lib.exe,在D:\Program Files\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\目录下,
复制整个文件夹到新的目录(如:桌面),
方案一:编译生成动态sqlite3.lib
sqlite3.def = lib.exe => dynamic sqlite3.lib = solution => SQLite3-dynamic_lib.exe + sqlite3.dll
1. 将sqlite3.def复制到新的目录下(如:C:\Users\Snow-Angel\Desktop\x64),
进入cmd输入:LIB /DEF:sqlite3.def /MACHINE:X64,生成需要的动态sqlite3.lib文件。
2. 新建空项目测试:SQLite3-dynamic_lib,
添加sqlite3.h, sqlite3.dll和生成的sqlite3.lib到项目目录下
3. 包含头文件:#include “sqlite3.h”
预编译lib文件:
方式1. #pragma comment(lib, "sqlite3.lib")
方式2. 在项目上 右键 | 添加 | 现有项…,选择sqlite3.lib,自动添加到资源文件中
4. 项目属性 | 配置属性 |
常规 | 字符集:使用Unicode字符集,C/C++ | 代码生成 | 运行库:多线程(/MT)
设置为Release x64,编译运行。
5. 测试代码:
#include #include "sqlite3.h"
#pragma comment(lib, "sqlite3.lib")
using namespace std;
int main(int argc, char* argv[]) { sqlite3* db; int res = sqlite3_open("test.db", &db); if (SQLITE_OK == res) { cout << "Open database succeed." << endl; } else { cout << "Can't open database: " << sqlite3_errmsg(db) << endl; exit(1); }
const char* sql = "CREATE TABLE company(" \ "id INT PRIMARY KEY NOT NULL, " \ "name TEXT NOT NULL, " \ "age INT NOT NULL, " \ "address CHAR(50), " \ "salary REAL );";
// Execute SQL statement char* errmsg = nullptr; res = sqlite3_exec(db, sql, 0, 0, &errmsg); if (SQLITE_OK == res) { cout << "Create table succeed.\n" << endl; } else { cout << "SQL error: " << errmsg << endl; sqlite3_free(errmsg); }
sqlite3_close(db);
system("pause"); return 0; }
|
方案二:编译生成静态sqlite3.lib
sqlite3.c, sqlite3.h, sqlte3ext.h = solution_obj / dll=> sqlite3.obj = LIB sqlite3.obj =>
static sqlite3.lib => = solution => SQLite3-static_lib.exe
1. 新建空项目SQLite3-obj,添加文件sqlite3.c, sqlite3.h, sqlte3ext.h到项目目录下,
配置类型为动态库(.dll),生成 Release x64,
在路径
C:\Users\Snow-Angel\Desktop\SQLite3-obj\SQLite3-obj\x64\Release下会生成sqlite3.obj文件
2. 复制sqlite3.obj到复制的目录C:\Users\Snow-Angel\Desktop\x64下,
进入cmd输入:LIB sqlite3.obj,生成静态的sqlite3.lib。
(其实是将.c .h等文件编译后的目标文件.obj用lib.exe重新生成链接库文件.lib)
3. 新建空项目测试:SQLite3-static_lib
添加sqlite3.h, sqlite3.dll和生成的sqlite3.lib到项目目录下,同上。