<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>研究研究 &#187; sqlite3</title>
	<atom:link href="http://www.yanjiuyanjiu.com/tag/sqlite3/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yanjiuyanjiu.com</link>
	<description>关注互联网和人工智能</description>
	<lastBuildDate>Wed, 04 Jan 2012 04:36:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>在Visual Studio 下编译 sqlite3</title>
		<link>http://www.yanjiuyanjiu.com/2009/04/14/compile-sqlite3-with-vs/</link>
		<comments>http://www.yanjiuyanjiu.com/2009/04/14/compile-sqlite3-with-vs/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 09:11:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[开源工具]]></category>
		<category><![CDATA[sqlite3]]></category>

		<guid isPermaLink="false">http://www.yanjiuyanjiu.com/?p=138</guid>
		<description><![CDATA[首先，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 添加到工程，具体做法是右击“源文件”，选择“添加-&#62;现有项”，浏览到sqlite3.c即可。如下图所示。 然后将sqlite3.def 添加到工程，然后输入给连接器。具体做法是右击工程sqlite3，选择“属性”，在弹出的对话框中选择“连接器-&#62;输入”，在“模块定义文件”中输入sqlite3.def，如下图所示。 好，可以开始编译了，右击sqlite3，选择“生成”，结果链接出错， &#8212;&#8212; 已启动生成: 项目: sqlite3, 配置: Release Win32 [...]]]></description>
			<content:encoded><![CDATA[<p>首先，sqlite 官方已经有预编译好的DLL下载，如果你不需要特别优化的版本，直接下载官网上的DLL即可。你可以在<a id="h._j" title="下载" href="http://www.sqlite.org/download.html" target="_blank">下载</a> 页面的 “Precompiled Binaries For Windows” 可以找到。<br />
不过你想编译出自己的版本，比如添加优化参数后编译，debug版，或进行一些定制（例如官网<a id="uq3r" title="这里" href="http://www.sqlite.org/compile.html" target="_blank">这里</a> 有一些预编译宏，允许你定制自己的sqlite），那么你就需要自己编译了。</p>
<p>首先在下载源代码，在页面的第一行就是，如 <a id="xblx" title="sqlite-amalgamation-3_6_12.zip" href="http://www.sqlite.org/sqlite-amalgamation-3_6_12.zip" target="_blank">sqlite-amalgamation-3_6_12.zip</a> ，接着下载编译好的DLL，我们主要是需要这里面的一个 sqlite3.def 文件，因为源代码里没有。一般下拉到  “Precompiled Binaries For Windows”  就可以看到，例如 <a id="ypnf" title="sqlitedll-3_6_12.zip" href="http://www.sqlite.org/sqlitedll-3_6_12.zip" target="_blank">sqlitedll-3_6_12.zip</a> 。有了这两个压缩包就可以了。</p>
<p>首 先解压 sqlite-amalgamation-3_6_12.zip 到文件夹 sqlite3\，会得到  sqlite3.c，sqlite3.h，sqlite3ext.h 三个文件，然后解压 sqlitedll-3_6_12.zip ，把 sqlite3.def 移动到 sqlite3\ 下面。</p>
<p>打开 visual studio，新建一个空的dll工程，工程名为sqlite3，这样是为了能直接生成名为sqlite3.dll 的dll。然后sqlite3\  下的4个文件文件夹移动到此工程目录下，即与 sqlite3.vcproj 在同一级。<br />
将 sqlite3.c 添加到工程，具体做法是右击“源文件”，选择“添加-&gt;现有项”，浏览到sqlite3.c即可。如下图所示。</p>
<div id="gt0c" style="text-align: center"><img class="picasa" src="http://lh3.ggpht.com/_8SGG9H7xljY/SePhkuuJFxI/AAAAAAAAALU/EEwwmIknjVQ/s400/Snap3.jpg" alt="undefined" /></div>
<p><span id="more-4048"></span><br />
然后将sqlite3.def 添加到工程，然后输入给连接器。具体做法是右击工程sqlite3，选择“属性”，在弹出的对话框中选择“连接器-&gt;输入”，在“模块定义文件”中输入sqlite3.def，如下图所示。</p>
<div id="y.fm" style="text-align: center"><img class="picasa" src="http://lh5.ggpht.com/_8SGG9H7xljY/SePhk5giPjI/AAAAAAAAALc/-R74CogHXlE/s512/Snap6.jpg" alt="undefined" /></div>
<p>好，可以开始编译了，右击sqlite3，选择“生成”，结果链接出错，</p>
<p><span>&#8212;&#8212; 已启动生成: 项目: sqlite3, 配置: Release Win32 &#8212;&#8212;</span><br /><span>正在编译&#8230;</span><br /><span>sqlite3.c</span><br /><span>正在链接&#8230;</span><br /><span>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name</span><br /><span>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name16</span><br /><span>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name</span><br /><span>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name16</span><br /><span>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name</span><br /><span>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name16</span><br /><span>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_table_column_metadata</span></p>
<p>看来sqlite3.def 中定义的这几个导出函数找不到定义，什么原因呢，经过一番google，找到<a id="yhfj" title="这篇文章" href="http://source.online.free.fr/Windows_HowToCompileSQLite.html" target="_blank">这篇文章</a> ，需要增加一个预定义宏 SQLITE_ENABLE_COLUMN_METADATA，这个宏是什么意思呢，到<a id="lcli" title="官网" href="http://www.sqlite.org/compile.html" target="_blank">官网</a> 去查一下，<br />
<strong><br />
<span>SQLITE_ENABLE_COLUMN_METADATA</span></strong></p>
<p><span> 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:</span></p>
<p><span> * sqlite3_column_database_name()</span><br /><span> * sqlite3_column_database_name16()</span><br /><span> * sqlite3_column_table_name()</span><br /><span> * sqlite3_column_table_name16()</span><br /><span> * sqlite3_column_origin_name()</span><br /><span> * sqlite3_column_origin_name16()</span><br /><span> * sqlite3_table_column_metadata()</span></p>
<p>原来是只有当启用了这个宏后，c代码中才会后这几个函数的定义，OK，在预处理器中添加 SQLITE_ENABLE_COLUMN_METADATA，如下图所示。</p>
<div id="w-x5" style="text-align: center"><img class="picasa" src="http://lh3.ggpht.com/_8SGG9H7xljY/SePhk-UAexI/AAAAAAAAALk/BfSoZafJ7RQ/s512/Snap7.jpg" alt="undefined" /></div>
<p>再来编译，搞定！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanjiuyanjiu.com/2009/04/14/compile-sqlite3-with-vs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

