VC2005编译SQLite,生成WINCE上使用的DLL和Lib

 
选择创建一个“WIN32智能设备项目”;
应用程序类型选择:一个空的Dll;
将sqlite3.5.1的所有源码均加入工程(http://sourceforge.net/project/showfiles.php?group_id=88393 可以下载。最新的则要到官网去下载,一个是sqlitedll-3_6_15.zip,一个是sqlite-amalgamation-3_6_15.zip 。下载完之后,解压放到你的工程目录之下)。注意需要将tclsqlite.c和shell.c、icu.c去掉。其中tclsqlite.c用于生成基于tcl的api,如果要编译,这需要另外下 载tcl.h;shell.c用于生成命令行模式的sqlite.exe,如果是静态库形式则可以选择; icu是 internationalcomponents forunicode,如果需要则需另外下载相关头文件。
在源文件和头文件种,分别把*.c和*.h文件加入进来。

选中项目(而不是文件),项目->属性->C/C++->预编译头-> 创建/使用预编译头:  选择不使用预编译头。
选中项目(而不是文件),项目->属性->链接器->输入-> 模块定义文件:  输入“sqlite3.def”。
好,可以开始编译了,右击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,如下图所示。


 
再来编译,搞定!

你可能感兴趣的:(C++,c,sqlite,C#,WinCE)