zoukankan      html  css  js  c++  java
  • 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头文件提供给其他人使用,编译完后再把宏定义改回原来的。

  • 相关阅读:
    Asp.net弹出浏览器客户端确认对话框代码 Carlwave
    VS 2005 与SQL Server 2005整合优势在哪里?(from csdn.net) Carlwave
    如何让搜索引擎收录我的站点 Carlwave
    超强扩展性的DNNDotNetNuke模块功能分类列表(from 中国DNN) Carlwave
    DotNetNuke命名空间概述 Carlwave
    Most Popular Questions and Answers on ASP.NET Whidbey(from asp.net forums,write by ASP.NET Team) Carlwave
    火箭官方宣告麦蒂缺阵五周 季后赛前景蒙上阴影 Carlwave
    asp.net有效使用缓存(转) Carlwave
    《Business Rules Engine Overview》《业务规则引擎概述》write by Mark Kamoski Carlwave
    中国详细省市县自治区名称列表(含access数据库和sql2000备份数据库) Carlwave
  • 原文地址:https://www.cnblogs.com/lidabo/p/3082473.html
Copyright © 2011-2022 走看看