编译最新的SQLite 3.8.4.3为一个DLL
SQLite是一个小型数据库。特别适合于client应用程序使用,它的众多优点就不多说了。有兴趣的去搜索。
话说使用吧。
我们要使用。就须要调用它。如今一步一步来。
第一步:上SQLite官网http://www.sqlite.org/下载它的源代码,它的源代码有两种格式,一种是很多文件都放在一起的,我称之为集成代码包,还有一个是非常多.c和.h文件,是分开的。我称之为松散代码包。松散代码包对编译的要求比較高,我也没那时间再去研究它的源代码,于是又变懒了,使用集成代码包吧。例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2Nwd19jbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
下载图上标注的代码
第二步:准备编译。下载下来之后是个ZIP,解开。里面有shell.c、sqlite3.c、sqlite3.h和sqlite3ext.h这么几个文件,当中shell.c我们不须要,其它的都是要用的
第三步:開始编译,以VS2010为例,打开VS2010。创建一个Win32的DLL空project,然后把sqlite3.c、sqlite3.h和sqlite3ext.h这三个文件加入到project中去,要编译出一个DLL。如今它已经能编译出来了,问题是编译出来之后没有导出函数,是不能用的,所以须要一个DEF文件(符号定义文件),这个文件按理来说我们能够自己加入,只是你假设不阅读源码是加入不了了,我们简单一点。使用官方提供的,这个要另外下载,当然,还是刚才的下载位置,找到SQLite官方为我们提供好的DLL的下载链接。进行下载,例如以下图:
下载下来之后解开这个ZIP。里面有个DEF文件,拷贝到project文件夹中去。然后再在VS2010中加入上,如今有导出函数了,可是编译不能通过,我们须要定义两个宏,他们是:
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_RTREE
把这两个宏加入到project中去,例如以下图:
如今编译,就能够通过了
问题一:你编译Debug版本号和Release版本号的时候这两个宏要分别进行加入,否则是不行的。
问题二:编译Release版本号的时候记得设置成静态编译,否则在没有VC库的机器上不能正常调用这个DLL。
第四步:优化处理和调用
如今,你已经有一个SQLite的DLL了,为了个性化,或者其它要求,你能够加入一个Version资源。然后写上一些个性化的信息。到此为止,你的SQLite的DLL已经编译出来了。我在VS2010下,编译出来的仅仅有601KB。比官方提供的630KB小不少(DLL是越小越好啊),甚至你还能够给它来个数字签名彰显版权(官方不会限制你这么做)。
第五步:成果展示:
最后的问题:在网上看到非常多人想解决这个DLL接口上的char和wchar_t的问题,我也查了一些资料,看了下,官方里出来的这些接口看着是char。事实上是utf-8,也就是说什么字符都能处理,可是这是针对国外英文系的国家,国内用户在将字符串写入数据库之前,要进行转换。读出来之后要再次进行转换。否则是乱码(貌似和解析XML一样啊)。
编译最新的SQLite 3.8.4.3为一个DLL的更多相关文章
- 让PDF.NET支持最新的SQLite数据库
最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...
- PDF.NET支持最新的SQLite数据库
最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...
- 编译最新ffmpeg2.0.1到iOS设备
www.mingjianhua.com 转载请注明出处. 上一篇文章讲了用NDKr9编译最新ffmpeg2.0.1到android平台,一般做了Android平台的编解码就免不了要做iOS,这次一起把 ...
- (转)windows下编译最新的x264
二:<windows下编译最新的x264> X264更新的比较快,每天都有更新,但算法模块,基本结构是没有多大变化的.x264都是用C语言写的包括C99,但C99语法是在VC中是没法用的( ...
- apk 反编译 - 最新版图文教程
apk 反编译 - 最新版图文教程 结合网上众多教程,整理一篇自己操作的,工具都是目前最新版 apk 反编译也就是将打包后的 apk 反编译为资源文件(图片).layout.样式.相关的实现代码等.( ...
- 获取并编译最新的Notepad++源码
获取并编译最新的Notepad++源码 http://blog.csdn.net/u012814856/article/details/68947310 Notepad++源码编译及其分析 http: ...
- QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接
QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接: QSqlDatabase database = QSqlDatabase::addD ...
- SqlSugar解决SQLite访问的问题:Unable to load DLL 'SQLite.Interop.dll'
SqlSugar用的版本是4.5.9.5,访问SQLite数据提示错误.在本机调试一时没有什么错误,把代码发布到服务器上以后刚开始运行没有问题,一段时间后报错. English Message : C ...
- 在Windows上编译最新的CURL,含有zlib,openssl
最近,从网上下载了一个curl库,使用时各种报错,都无法启动,于是干脆就直接自己编译了. 1. 准备工作 a. 下载zlib zlib可以使得HTTP请求支持gzip压缩,其地址如下: 官网:http ...
随机推荐
- MySQL入门详解(三)---mysql如何进行主从配置
基本要求 两台服务器(windows,linux,mac) 双方mysql版本需一致,如不一致,只要主节点低于从节点 两台服务器防火墙关闭 双方数据库所用的用户,要具有远程访问的权限 主服务器配置 修 ...
- 绝版Node--Sequlize搭建服务(Node全栈之路)
绝版Node--Sequlize搭建服务(Node全栈之路) 参考资料:https://itbilu.com/nodejs/npm/VkYIaRPz-.html 准备环境:Mysql,Node 前沿: ...
- LeetCode题解之Copy List with Random Pointer
1.题目描述 2.问题分析 首先要完成一个普通的单链表的深度复制,然后将一个旧的单链表和新的单链表的节点使用map对应起来,最后,做一次遍历即可. 3.代码 RandomListNode *copyR ...
- bootstrap使用基础
1.为了适应跨屏浏览,Bootstrap为单元格预定义了4种class ,分别对应于手机.ipad.笔记本电脑.台式机. <div class="row"> <d ...
- c# 二分查找法
1.仅 当 列表 是 有序 的 时候, 二分 查找 才 管用. 2.一般而言, 对于 包含 n 个 元素 的 列表, 用 二分 查找 最多 需要 log2n 步, 而 简单 查找 最多 需要 n 步. ...
- 新建maven工程使用webapp插件弹出javax.servlet.http.HttpServlet was not found on the Java Build Path异常
检查pom.xml文件中是否引用javax.servlet,引用如下所示:
- Jboss EAP 6 EJB调用常见问题
1. 调用EJB的三种方法 调用EAP 6 EJB的第一种方法,使用JBoss API,如下: Properties p = new Properties(); p.put("remote. ...
- The 10 Best Neighborhoods in Seattle
https://www.seattlemet.com/articles/2015/4/24/the-10-best-neighborhoods-in-seattle-may-2015 By Darre ...
- LVM卷的创建及案例演示
LVM:Logical Volume Manager, Version:2dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块. /dev/dm-# 这里的#表示数字,代 ...
- LAMP平台的搭建及应用
实验要求 1.构建PHP运行环境,实现LAMP协同架构,前提条件是服务器中已经编译好了Apache HTTP Server和MySQL数据库,(编译安装apache和编译安装mysql 请查看公众号L ...