Chinaunix首页 | 论坛 | 博客
  • 博客访问: 332975
  • 博文数量: 29
  • 博客积分: 5710
  • 博客等级: 大校
  • 技术积分: 567
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-18 11:52
文章分类

全部博文(29)

文章存档

2011年(2)

2010年(9)

2009年(6)

2008年(12)

我的朋友

分类: C/C++

2010-03-11 23:31:34

  首先,sqlite 官方已经有预编译好的DLL下载,如果你不需要特别优化的版本,直接下载官网上的DLL即可。你可以在 页面的 “Precompiled Binaries For Windows” 可以找到。
不过你想编译出自己的版本,比如添加优化参数后编译,debug版,或进行一些定制(例如官网 有一些预编译宏,允许你定制自己的sqlite),那么你就需要自己编译了。

  首先在下载源代码,在页面的第一行就是,如 ,接着下载编译好的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.def 添加到工程,然后输入给连接器。具体做法是右击工程sqlite3,选择“属性”,在弹出的对话框中选择“连接器->输入”,在“模块定义文件”中 输入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,如下图所示。



再来编译,搞定!

阅读(3246) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~