快捷搜索: 王者荣耀 脱发

VS2017编译SQLite3生成.lib

sqlite3.dll动态链接库,允许程序共享执行特殊任务所必需的代码和其他资源。

动态的sqlite3.lib相当于一个.h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,其生成的sqlite3.exe在运行时需要相应的.dll文件支持。

静态的sqlite3.lib将导出声明和实现都放在.lib中,编译后所有代码都嵌入到宿主程序,其生成的sqlite3.exe可直接运行。

以编译生成x64位的为例。下载文件:

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 FilesMicrosoft Visual Studio2017ProfessionalVCToolsMSVC14.16.27023inHostx64x64目录下,

复制整个文件夹到新的目录(如:桌面),

方案一:编译生成动态sqlite3.lib

sqlite3.def = lib.exe => dynamic sqlite3.lib = solution => SQLite3-dynamic_lib.exe + sqlite3.dll

1. 将sqlite3.def复制到新的目录下(如:C:UsersSnow-AngelDesktopx64),

进入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 <iostream> #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 << "Cant 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. " << 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:UsersSnow-AngelDesktopSQLite3-objSQLite3-objx64Release下会生成sqlite3.obj文件

2. 复制sqlite3.obj到复制的目录C:UsersSnow-AngelDesktopx64下,

进入cmd输入:LIB sqlite3.obj,生成静态的sqlite3.lib。

(其实是将.c .h等文件编译后的目标文件.obj用lib.exe重新生成链接库文件.lib)

3. 新建空项目测试:SQLite3-static_lib

添加sqlite3.h, sqlite3.dll和生成的sqlite3.lib到项目目录下,同上。

经验分享 程序员 微信小程序 职场和发展