SQLite3源码在Windows及WinCE平台下的编译方法

好久没有写博客了,最近有时间又开始写点东西。

最近,刚好需要用到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头文件提供给其他人使用,编译完后再把宏定义改回原来的。

时间: 2024-09-30 21:50:55

SQLite3源码在Windows及WinCE平台下的编译方法的相关文章

Windows及Linux平台下的计时函数总结

本文对Windows及Linux平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的各种函数. 比如Window平台下特有的Windows API函数GetTickCount().timeGetTime().及QueryPerformanceCounter(), Linux平台下特有的gettimeofday()函数,以及标准的C/C++函数time()和clock().下面分别对此进行简单介绍并附上示例代码. 通用的C/C++计时函数time()和clock() time_t ti

请问windows的.net平台下比较好的轻量级插件式框架,哪个比较好?

问题描述 请问windows的.net平台下比较好的轻量级插件式框架,哪个比较好? 请问.net平台下比较好的轻量级插件式框架,哪个比较好? 比如SCSF,MEF等 解决方案 FireBreath还不错,可以试试啊

C#在wince平台下开发软件

问题描述 c#在wince平台下然后编写恢复出厂设置功能,求详解... 解决方案 解决方案二:该回复于2012-04-19 09:52:49被版主删除解决方案三:恢复程序的出厂设置还是恢复系统的.前者很简单,你可以把设置定义在一个配置文件中,恢复出厂设置就是删除这个配置文件,然后创建一个包含默认设置的新配置文件.后者程序没有办法直接控制,一般是用户开机按一个热键,然后wince自带一个恢复镜像的功能.你可以咨询硬件供应商.解决方案四:順便說手機開發不可少的控件RescoMobileFormsTo

求WinCE平台下开发的射频读写代码

问题描述 求WinCE平台下开发的射频读写代码!!! 解决方案 解决方案二:找你的设备商要吧.我看了一下.我这里的就两句话.太简单了.一个read,

Spark源码分析之Spark Shell(下)

继上次的Spark-shell脚本源码分析,还剩下后面半段.由于上次涉及了不少shell的基本内容,因此就把trap和stty放在这篇来讲述. 上篇回顾:Spark源码分析之Spark Shell(上) function main() { if $cygwin; then # Workaround for issue involving JLine and Cygwin # (see http://sourceforge.net/p/jline/bugs/40/). # If you're us

Thrift在Windows及Linux平台下的安装和使用示例

thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的RPC(远程服务调用)框架. 本文主要目的是分别介绍在Windows及Linux平台下的Thrift安装步骤,以及实现一个简单的demo演示Thrift的使用方法.更多Thrift原理留在以后再行介绍. thrift安装 源码下载:thrift官网,或者thrift-github地址,我下载的是thrift-0.9.3.tar.gz. 安装依赖库 boostboost的编译就不再这里介绍了,我

java源码-这个题目麻烦各位看下,求源码

问题描述 这个题目麻烦各位看下,求源码 这个项目怎么写啊,没有想出来,求大神?????????????????????????? 解决方案 分隔成字符串数组,然后去匹配?

JDK 7U15在 Windows x86平台下的安装方法_java

这里以JDK 7U15在 Windows x86平台下的安装为例,其他平台安装与此类同. 下载JDK请查看:JDK最新下载地址[含下载方法] ①JDK 7U15下载完成后,是一个可执行文件,如图所示: ②双击运行该安装程序,出现如下界面: ③点击"下一步",出现如下界面: ④可以看到,JDK包含了Java开发工具.源代码(基础类库)和公共JRE,这三项都是默认安装的,是Java开发所必须的,缺一不可.这里,可以更改JDK的安装目录.选择好安装目录,点击"下一步",进

Windows 和 Linux 平台下的端口转发工具

原文地址: http://unmi.cc/windows-linux-port-forwarding/ 这里记录一下我曾经使用过的几个端口转发工具,即端口映射.端口重定向,和 NAT 也是差不多的概念. Linux 下用过 iptables,rinetd:Windows 下用过某个防火墙的 NAT 功能.RemoteAnywhere 的端口重定向.FPipe,还有最近刚找到的 PassPort.试着去设置一下 Windows 2000 的 NAT  功能,但未成功,还是特定的软件简单易用,下面介