文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在Visual Studio 下编译 sqlite3

在Visual Studio 下编译 sqlite3

时间:2010-03-11  来源:elong21

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

  首先在下载源代码,在页面的第一行就是,如 sqlite-amalgamation-3_6_12.zip ,接着下载编译好的DLL,我们主要是需要这里面的一个 sqlite3.def 文件,因为源代码里没有。一般下拉到  “Precompiled Binaries For Windows”  就可以看到,例如 sqlitedll-3_6_12.zip 。有了这两个压缩包就可以了。

  首先解压 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,如下图所示。



再来编译,搞定!
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载