Sqlite作为一个开源的东东,必不可少的就是下载学习和编译成lib和dll文件添加到自己的项目中。在这个过程中可能会遇到一些小问题。在这里记录一下,避免自己忘了。
Sqlite的下载
下载地址: 官网 源码保证最新
这是本人使用的文件
去官网下载需要sqlite-amalgamation-3140100.zip,sqlite-dll-win32-x86-3140100.zip两个文件。
Sqlite的编译
下载的代码已经包含了.dll文件,你可以不编译dll文件,但本人建议自己编译一遍,因为这样生成的dll和lib文件才是同步的,还能熟悉编译流程。
编译exe:
在vs下新建一个项目Sqlite3,选择控制台应用程序并建立一个 空项目,将下载的文件解压得到的shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h文件添加到项目中。直接编译即可的到sqlite.exe文件,这与我们安装的sqlite是一样的运行界面。安装就是在上面官网的Precompiled Binaries for 系统类型部分下载相应的sqlite_tool_系统类型_版本信息.zip,解压就可以的到和刚才一样的sqlite.exe文件。如果在cmd的任意目录下运行,在环境变量里添加.exe的路径即可。
编译dll:
将解压得到的解压后的sqlite3.c、sqlite3.h、sqlite3ext.h和sqlite3.def这四个文件添加到一个项目中(项目创建时在选择是否为空项目页时要选择应用程序类型为dll而不是控制应用程序,这是与生成exe的区别)。打开此项目的属性对话框->链接器->输入 下的模块定义文件下将我们的sqlite3.def文件名添加进去。这时候如果直接编译会出现各种错误,本人也不知道怎么回事,我自己找的解决方法就是在项目的属性对话框->C/C++->预编译器 下的预编译器定义中添加两行定义即可
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
这时只是得到了dll文件,我们编程所需的lib文件还没有生成。
生成动态lib文件
首先查看自己的vs编译器的安装目录下,我的是D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin找到link.exe文件,然后在cmd下进入该目录
输入命令如下:
LIB /out:sqlite3.lib /MACHINE:IX86 /DEF:sqlite3.def
此时sqlite3.def和生成的lib与link.exe同目录
指定文件目录的命令
LIB /out:D:\sqlite3.lib /MACHINE:IX86 /DEF:D: \sqlite3.def
这样就可以在指定目录生成lib文件,有一点必须注意 输入命令的目录必须在link.exe下。
也有人直接把从vs的安装目录D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin下找到lib.exe和link.exe,和D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE找到mspdb110.dll。将lib.exe link.exe mspdb100.dll放到sqlite3.def所在的文件夹下。这时cmd直接进入sqlite.def文件夹下,直接输入 LIB /DEF:sqlite3.def/MACHINE:IX86 这与我们第一种方法是一样的。
但是此时所生成的lib文件是动态的,也就是说当我们添加到程序中时必须给予.dll文件的支持,即我们单独拿出exe文件无法运行,必须将dll文件添加到同一目录下。
生成静态lib文件
这时我们需要一个sqlite3.obj的文件,这个文件在debug和release目录下都有,对应不同的版本。这时将obj文件拷到动态生成时的lib.exe目录下,并且把D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE目录下的mspdb110.dll,mspdbcore.dll,mspdbsrv.exe,msobj110.dll同样拷到lib.exe所在目录下。
在cmd下直接输入lib sqlite3.obj 就能生成静态的lib,此时就不需要dll的支持。还是需要进入lib.exe的目录。
还有最简单的方法就是,在vs的项目属性的对话框下的 项目默认值->配置类型 下选择静态lib即可生成静态lib,但是动态的还是要手动。