首页 > 代码库 > 编译最新的SQLite 3.8.4.3为一个DLL
编译最新的SQLite 3.8.4.3为一个DLL
SQLite是一个小型数据库,特别适合于客户端应用程序使用,它的众多好处就不多说了,有兴趣的去搜索。
话说使用吧。
我们要使用,就需要调用它,现在一步一步来。
第一步:上SQLite官网http://www.sqlite.org/下载它的源码,它的源码有两种格式,一种是许多文件都放在一起的,我称之为集成代码包,另一个是很多.c和.h文件,是分开的,我称之为松散代码包。松散代码包对编译的要求比较高,我也没那时间再去研究它的源代码,于是又变懒了,使用集成代码包吧,如下图:
下载图上标注的代码
第二步:准备编译,下载下来之后是个ZIP,解开,里面有shell.c、sqlite3.c、sqlite3.h和sqlite3ext.h这么几个文件,其中shell.c我们不需要,其他的都是要用的
第三步:开始编译,以VS2010为例,打开VS2010,创建一个Win32的DLL空工程,然后把sqlite3.c、sqlite3.h和sqlite3ext.h这三个文件添加到工程中去,要编译出一个DLL,现在它已经能编译出来了,问题是编译出来之后没有导出函数,是不能用的,所以需要一个DEF文件(符号定义文件),这个文件按理来说我们可以自己添加,不过你如果不阅读源代码是添加不了了,我们简单一点,使用官方提供的,这个要另外下载,当然,还是刚才的下载位置,找到SQLite官方为我们提供好的DLL的下载链接,进行下载,如下图:
下载下来之后解开这个ZIP,里面有个DEF文件,复制到工程目录中去,然后再在VS2010中添加上,现在有导出函数了,但是编译不能通过,我们需要定义两个宏,他们是:
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_RTREE
把这两个宏添加到工程中去,如下图:
现在编译,就可以通过了
问题一:你编译Debug版本和Release版本的时候这两个宏要分别进行添加,否则是不行的。
问题二:编译Release版本的时候记得设置成静态编译,否则在没有VC库的机器上不能正常调用这个DLL。
第四步:优化处理和调用
现在,你已经有一个SQLite的DLL了,为了个性化,或者其他要求,你可以添加一个Version资源,然后写上一些个性化的信息,到此为止,你的SQLite的DLL已经编译出来了。我在VS2010下,编译出来的只有601KB,比官方提供的630KB小不少(DLL是越小越好啊),甚至你还可以给它来个数字签名彰显版权(官方不会限制你这么做)。
第五步:成果展示:
最后的问题:在网上看到很多人想解决这个DLL接口上的char和wchar_t的问题,我也查了一些资料,看了下,官方里出来的这些接口看着是char,其实是utf-8,也就是说什么字符都能处理,但是这是针对国外英文系的国家,国内用户在将字符串写入数据库之前,要进行转换,读出来之后要再次进行转换,否则是乱码(貌似和解析XML一样啊)。