分类: C/C++
2010-03-11 23:31:34
首先在下载源代码,在页面的第一行就是,如 ,接着下载编译好的DLL,我们主要是需要这里面的一个 sqlite3.def 文件,因为源代码里没有。一般下拉到 “Precompiled Binaries For Windows” 就可以看到,例如 。有了这两个压缩包就可以了。
首先解压 sqlite-amalgamation-3_6_12.zip 到文件夹 sqlite3\,会得到 sqlite3.c,sqlite3.h,sqlite3ext.h 三个文件,然后解压 sqlitedll-3_6_12.zip ,把 sqlite3.def 移动到 sqlite3\ 下面。
打开 visual studio,新建一个空的dll工程,工程名为sqlite3,这样是为了能直接生成名为sqlite3.dll
的dll。然后sqlite3\ 下的4个文件文件夹移动到此工程目录下,即与 sqlite3.vcproj 在同一级。
将 sqlite3.c 添加到工程,具体做法是右击“源文件”,选择“添加->现有项”,浏览到sqlite3.c即可。如下图所示。
好,可以开始编译了,右击sqlite3,选择“生成”,结果链接出错,
—— 已启动生成: 项目:
sqlite3, 配置: Release Win32 ——
正
在编译…
sqlite3.c
正在链接…
sqlite3.def : error
LNK2001: 无法解析的外部符号 sqlite3_column_database_name
sqlite3.def : error
LNK2001: 无法解析的外部符号 sqlite3_column_database_name16
sqlite3.def : error
LNK2001: 无法解析的外部符号 sqlite3_column_origin_name
sqlite3.def : error
LNK2001: 无法解析的外部符号 sqlite3_column_origin_name16
sqlite3.def : error
LNK2001: 无法解析的外部符号 sqlite3_column_table_name
sqlite3.def : error
LNK2001: 无法解析的外部符号 sqlite3_column_table_name16
sqlite3.def : error
LNK2001: 无法解析的外部符号 sqlite3_table_column_metadata
看来sqlite3.def 中定义的这几个导出函数找不到定义,什么原因呢,经过一番google,找到 ,需要增加一个预定义宏
SQLITE_ENABLE_COLUMN_METADATA,这个宏是什么意思呢,到 去查一下,
SQLITE_ENABLE_COLUMN_METADATA
When this C-preprocessor macro is defined, SQLite includes some
additional APIs that provide convenient access to meta-data about
tables and queries. The APIs that are enabled by this option are:
*
sqlite3_column_database_name()
* sqlite3_column_database_name16()
* sqlite3_column_table_name()
* sqlite3_column_table_name16()
* sqlite3_column_origin_name()
* sqlite3_column_origin_name16()
* sqlite3_table_column_metadata()
原来是只有当启用了这个宏后,c代码中才会后这几个函数的定义,OK,在预处理器中添加 SQLITE_ENABLE_COLUMN_METADATA,如下图所示。