您的位置:首页 > 数据库

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

2009-06-16 19:16 861 查看
 选择创建一个“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,如下图所示。



再来编译,搞定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息