编译wxsqlite3-4.5.1
1、方法一
- 用VS2022 建立一个控制台工程sqlite3sec,选项为静态库,不包含预编译头。
- 把wxsqlite3-4.5.1.zip\wxsqlite3-4.5.1\sqlite3secure\src下所有的文件复制到工程的工作目录sqlite3sec。
- 把sqlite3.h和sqlite3secure.c加入工程,只添加这两个文件就可以,不要添加其他文件,不用管其他文件报错。
- 工程配置属性:AllConfigurations->C/C+±>预处理器->预处理器定义,加入: SQLITE_HAS_CODEC=1
CODEC_TYPE=CODEC_TYPE_AES256 //将默认加密算法ChaCh20变更AES256 - Batch Build 编译出静态库。 如果出现错误信息,如:This function or variable may be unsafe. Consider using strcat_s instead。可以在sqlite3secure.c开头添加:#define _CRT_SECURE_NO_WARNINGS。或者在“预处理器定义”添加“_CRT_SECURE_NO_WARNINGS”。
如果出现warning C4267: “函数”: 从“size_t”转换到“unsigned int”。发生 C4267的原因是:在x86上,size_t是Win32上的unsigned int。将size_t作为unsigned int参数传递,这会导致Win64上的截断,在Win64中,size_t为 64 位,而unsigned int仍为 32 位。
可以忽略此警告,原因是:如果在Win64中进行编译,std::cout<<range_index将解析为接受unsigned__int64的operator<<的重载,因为类型size_t在Win64上就是该类型。 如果采用“debug”和“x86”编译,则不会出现此警告。 可以这样调整:项目属性 ->配置属性->C/C++ ->常规 ->警告登记,设置为“等级2(/W2)” - 把sqlite3.h和sqlite3sec.lib 复制即可使用。
#define SQLITE_HAS_CODEC 1
#include <stdio.h>
#include "sqlite3.h"
#pragma comment(lib,"sqlite3sec.lib")
int main() {
sqlite3* db;
sqlite3_open("data.db", &db);
sqlite3_key(db, "123456", 6);
sqlite3_exec(db, "create table user (id int, name vchar(30))", NULL, NULL, NULL);
int i = sqlite3_exec(db, "insert into user (id,name) values (333,'quit')", NULL, NULL, NULL);
printf("i=%d", i);
sqlite3_close(db);
}
2、方法二
- 解压缩wxsqlite3-4.5.1.zip后,进入\sqlite3secure\build目录,打开SQLite3Secure_vc16.sln,升级到v143。然后批生成。