sqlite3 windows,sqlite3源代码
好久没写博客了,最近又开始写点东西了。
最近正好需要用SQLite3数据库,就自己研究了一下。这真的是个好东西,所有开源的东西都是好的。
好了,言归正传。相信很多人用SQLite3源代码编译还是有很多麻烦的,网上找的也不是很全。
下面,我就写自己的编译方法。
首先,从http://www.sqlite.org/download.html, SQLite的官方网站下载最新的源代码。最新版本是v 3 . 7 . 11(2012年3月25日星期日)。
需要下载的源代码如下:
SQLite-merging-3071100.zip,SQLite-dll-win32-x86-3071100 . zip,sqlite-src-3071100.zip,SQLite-预处理-3071100 . zip .
1.将其编译成应用程序(*。exe),以便在命令行模式下进行调试。
(1)创建一个Win32控制台应用程序为空的项目,项目名为SQLite
(2)将SQLite-merging-3071100 . zip解压后的shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h添加到项目中,直接编译生成sqlite.exe,可以在命令行测试。
2.编译生成动态链接库(*。dll)在Win32平台下。
(1)创建一个Win32项目,选择一个空的Dll项目,项目名称为SQLite _ win32 _ dll
(2)将SQLite-merging-3071100 . zip解压缩的sqlite3.c、sqlite3.h和sqlite3ext.h以及SQLite-DLL-Win32-x86-3071100 . zip解压缩的sqlite3.def模块定义文件添加到项目中,将SQLITE_ENABLE_COLUMN_METADATA添加到预处理器中,编译后即可生成DLL。但此时只生成了sqlite_win32_dll.dll文件,没有生成对应的导入库(sqlite_win32_dll.lib)文件。具体方法如下:
修改sqlite3.c文件中SQLITE_API的宏定义(当前版本在sqlite3.c的第26行),修改为
# define SQLITE_API被修改为
# define SQLITE _ API _ _ declspec(dll export)
编译生成sqlite_win32_dll.dll和SQLite _ Win32 _ dll.lib。
或者直接将sqlite3.def添加到链接器输入模块定义文件中(推荐)。
3.编译生成动态链接库(*。WinCE平台下的dll)。
(1)创建一个智能设备项目,选择对应的SDK,然后选择一个名为SQLite _ WINCE的空Dll项目;
(2)SQLite-src-3071100 . zip解压后,src目录下的所有代码(test*除外。*、tclsqlite.c、lempar.c、shell.c)复制到项目目录,ext\rtree目录下的rtree.c、rtree.h、sqlite3rtree.h。将SQLite-DLL-Win32-x86-3071100.zip解压后的sqlite3.h.def模块定义文件添加到项目中,并从SQLite-预处理-3071100 . zip中解压关键字hash.h、opcodes.c、opcodes.h、parse.c、parse.h、sqlite3。
(3)在C/C —— Advanced 3354 Compile AS of engineering properties中选择TC,在C/C-preprocessor中添加SQLITE_ENABLE_COLUMN_METADATA,进行编译;
(4)此时,将报告一个连接错误。
1 os_win.obj:错误LNK2019:函数winShmSystemLock中引用了未解析的外部符号osUnlockFileEx
1 date.obj:错误LNK2019:函数osLocaltime中引用了未解析的外部符号localtime_s
谷歌搜索关键词“UnlockFileEx winShmSystemLock”后,http://www.sqlite.org/src/info/13ed106c8c279422,官网解释了第一个链接错误。比较完代码后,可以将osUnlockFileEx改为UnlockFileEx。当前版本位于(os_win.c第2373行)。
对于第二个链接错误,用_localtime64_s替换date.c文件中的localtime_s,并重新编译它。
(5)此时只生成了sqlite_wince.dll文件,而没有生成对应的导入库(sqlite_wince.lib)文件。具体方法如下:
修改sqlite3.h文件中SQLITE_API的宏定义(当前版本在sqlite3.h的第53行),修改为
# define SQLITE_API被修改为
# define SQLITE _ API _ _ declspec(dll export)
编译生成sqlite_win32_dll.dll和SQLite _ Win32 _ dll.lib。
或者直接将sqlite3.def添加到链接器输入模块定义文件中(推荐)。
注意:如果需要将sqlite3.h头文件提供给他人,编译后将宏定义改回原来的样子。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。