SQLite3源码在Windows及WinCE平台下的编译方法
2012-05-20 15:19
701 查看
好久没有写博客了,最近有时间又开始写点东西。
最近,刚好需要用到SQLite3数据库,就自己研究了一下,这个的确是个好东西,开源的东西都还不错。
好了,言归正传。相信不少人在用SQLite3源码编译的时候还是费了不少劲的,网上找来的东西都讲的不是很完整。
下面,我就将自己的编译方法写了出来。
首先从SQLite官方网站http://www.sqlite.org/download.html 下载最新的源代码,目前最新的版本是V3.7.11(2012年3月25日星期日)。
需要下载在源码如下:
sqlite-amalgamation-3071100.zip,sqlite-dll-win32-x86-3071100.zip,sqlite-src-3071100.zip,sqlite-preprocessed-3071100.zip。
1、 编译成Win32下的应用程序(*.exe),用于命令行模式下的调试。
(1)创建一个Win32 Console Application空的工程,工程名为“sqlite”;
(2)将sqlite-amalgamation-3071100.zip 解压后的shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h添加到工程中,直接编译即可生成sqlite.exe,可以在命令提示符下进行测试。
2、编译生成Win32平台下的动态链接库(*.dll)。
(1)创建一个Win32 Project,选择一个空的Dll工程,工程名为“sqlite_win32_dll”;
(2)将sqlite-amalgamation-3071100.zip解压后的sqlite3.c、sqlite3.h、sqlite3ext.h,将sqlite-dll-win32-x86-3071100.zip解压后的sqlite3.def模块定义文件一起添加到工程中,在Preprocessor中加入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(dllexport)
重新编译即可生成sqlite_win32_dll.dll和sqlite_win32_dll.lib。
或者直接把sqlite3.def添加在Linker--->Input--->Module Definition File中也可以搞定(推荐)。
3、 编译生成WinCE平台下的动态链接库(*.dll)。
(1)创建一个Smart Device设备工程,选择相应的SDK后,选择一个空的Dll工程,工程名为“sqlite_wince”;
(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.def模块定义文件一起添加到工程中,将sqlite-preprocessed-3071100.zip解压后的keywordhash.h,opcodes.c,opcodes.h,parse.c,parse.h,sqlite3.h都添加到工程目录下;
(3)在工程属性的C/C++——>Advanced——>Compile As中选择TC,在C/C++--->Preprocessor中加入SQLITE_ENABLE_COLUMN_METADATA,编译;
(4)此时,会报连接错误
1>os_win.obj : error LNK2019: unresolved external symbol osUnlockFileEx referenced in function winShmSystemLock
1>date.obj : error LNK2019: unresolved external symbol localtime_s referenced in function osLocaltime
对于第一个链接错误,在google搜索关键词“UnlockFileEx winShmSystemLock”后,在官网http://www.sqlite.org/src/info/13ed106c8c279422 给出了解释,对比代码后知道,将osUnlockFileEx改成UnlockFileEx即可,当前版本位于(os_win.c第2373行);
对于第二个链接错误把文件date.c中的localtime_s替换成_localtime64_s,重新编译即可。
(5)此时只生成了sqlite_wince.dll文件,没有生成对应的引入库(sqlite_wince.lib)文件,具体方法是如下:
修改sqlite3.h文件中的SQLITE_API宏定义(当前版本在sqlite3.h的第53行),将
# define SQLITE_API修改成
# define SQLITE_API __declspec(dllexport)
重新编译即可生成sqlite_win32_dll.dll和sqlite_win32_dll.lib。
或者直接把sqlite3.def添加在Linker--->Input--->Module Definition File中也可以搞定(推荐)。
注意:如果需要将sqlite3.h头文件提供给其他人使用,编译完后再把宏定义改回原来的。
最近,刚好需要用到SQLite3数据库,就自己研究了一下,这个的确是个好东西,开源的东西都还不错。
好了,言归正传。相信不少人在用SQLite3源码编译的时候还是费了不少劲的,网上找来的东西都讲的不是很完整。
下面,我就将自己的编译方法写了出来。
首先从SQLite官方网站http://www.sqlite.org/download.html 下载最新的源代码,目前最新的版本是V3.7.11(2012年3月25日星期日)。
需要下载在源码如下:
sqlite-amalgamation-3071100.zip,sqlite-dll-win32-x86-3071100.zip,sqlite-src-3071100.zip,sqlite-preprocessed-3071100.zip。
1、 编译成Win32下的应用程序(*.exe),用于命令行模式下的调试。
(1)创建一个Win32 Console Application空的工程,工程名为“sqlite”;
(2)将sqlite-amalgamation-3071100.zip 解压后的shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h添加到工程中,直接编译即可生成sqlite.exe,可以在命令提示符下进行测试。
2、编译生成Win32平台下的动态链接库(*.dll)。
(1)创建一个Win32 Project,选择一个空的Dll工程,工程名为“sqlite_win32_dll”;
(2)将sqlite-amalgamation-3071100.zip解压后的sqlite3.c、sqlite3.h、sqlite3ext.h,将sqlite-dll-win32-x86-3071100.zip解压后的sqlite3.def模块定义文件一起添加到工程中,在Preprocessor中加入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(dllexport)
重新编译即可生成sqlite_win32_dll.dll和sqlite_win32_dll.lib。
或者直接把sqlite3.def添加在Linker--->Input--->Module Definition File中也可以搞定(推荐)。
3、 编译生成WinCE平台下的动态链接库(*.dll)。
(1)创建一个Smart Device设备工程,选择相应的SDK后,选择一个空的Dll工程,工程名为“sqlite_wince”;
(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.def模块定义文件一起添加到工程中,将sqlite-preprocessed-3071100.zip解压后的keywordhash.h,opcodes.c,opcodes.h,parse.c,parse.h,sqlite3.h都添加到工程目录下;
(3)在工程属性的C/C++——>Advanced——>Compile As中选择TC,在C/C++--->Preprocessor中加入SQLITE_ENABLE_COLUMN_METADATA,编译;
(4)此时,会报连接错误
1>os_win.obj : error LNK2019: unresolved external symbol osUnlockFileEx referenced in function winShmSystemLock
1>date.obj : error LNK2019: unresolved external symbol localtime_s referenced in function osLocaltime
对于第一个链接错误,在google搜索关键词“UnlockFileEx winShmSystemLock”后,在官网http://www.sqlite.org/src/info/13ed106c8c279422 给出了解释,对比代码后知道,将osUnlockFileEx改成UnlockFileEx即可,当前版本位于(os_win.c第2373行);
对于第二个链接错误把文件date.c中的localtime_s替换成_localtime64_s,重新编译即可。
(5)此时只生成了sqlite_wince.dll文件,没有生成对应的引入库(sqlite_wince.lib)文件,具体方法是如下:
修改sqlite3.h文件中的SQLITE_API宏定义(当前版本在sqlite3.h的第53行),将
# define SQLITE_API修改成
# define SQLITE_API __declspec(dllexport)
重新编译即可生成sqlite_win32_dll.dll和sqlite_win32_dll.lib。
或者直接把sqlite3.def添加在Linker--->Input--->Module Definition File中也可以搞定(推荐)。
注意:如果需要将sqlite3.h头文件提供给其他人使用,编译完后再把宏定义改回原来的。
相关文章推荐
- SQLite3源码在Windows及WinCE平台下的编译方法
- SQLite3源码在Windows及WinCE平台下的编译方法
- SQLite3源码在Windows及WinCE平台下的编译方法
- SQLite3源码在Windows及WinCE平台下的编译方法
- 【转】SQLite3源码在Windows及WinCE平台下的编译方法
- VS2005下编译wince平台下的sqlite3源码出错启示
- SQLite3源码在Windows及WinCE平台下的编译方法
- 一种在windows平台下实现自动操作应用的方法,附带源码地址及使用方法
- Python非官方扩展模块搜索方法(尤其是Windows平台下已编译好的模块)
- Windows平台 Qt 编译静态库的方法
- sqlite3在windows平台下编译
- windows下eclipse中,涉及源码编译的apk开发——使用系统签名机制解决方法
- sqlite3在winCE下C编译的方法
- SQLite3.8.4.2在Windows平台下的编译和使用
- SQLite 源码编译方法
- 在windows下用Qt creator + mingw编译protobuf源码生成静态链接库的方法
- 视频编解码之windows平台下编译ffmpeg的方法和使用教程
- 转帖:为WinCE平台编译SQLite3.7动态库
- Windows平台使用VS2013编译VLC源码
- sqlite3在windows平台下编译