<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>评论：使用Visual C++ 2005编译Oracle Berkeley DB</title>
	<atom:link href="http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/</link>
	<description>Oracle Berkeley DB 中国研发团队的博客</description>
	<lastBuildDate>Mon, 19 Jul 2010 03:43:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>来自：cc</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-678</link>
		<dc:creator>cc</dc:creator>
		<pubDate>Wed, 03 Feb 2010 15:30:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-678</guid>
		<description>您好，我用的是VC++6.0编译的D:\DB\db-4.8.26\examples_cxx\getting_started 文件夹下的MyDb.dsw 出现以下报错：
--------------------Configuration: MyDb - Win32 Debug--------------------
Linking...
MSVCRTD.lib(crtexe.obj) : error LNK2001: unresolved external symbol _main
Debug/MyDb.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MyDb.exe - 2 error(s), 0 warning(s) vc++&quot;settings&quot;和“options”都做了修改 可以编译像“hello world&quot;</description>
		<content:encoded><![CDATA[<p>您好，我用的是VC++6.0编译的D:\DB\db-4.8.26\examples_cxx\getting_started 文件夹下的MyDb.dsw 出现以下报错：<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Configuration: MyDb &#8211; Win32 Debug&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Linking&#8230;<br />
MSVCRTD.lib(crtexe.obj) : error LNK2001: unresolved external symbol _main<br />
Debug/MyDb.exe : fatal error LNK1120: 1 unresolved externals<br />
Error executing link.exe.</p>
<p>MyDb.exe &#8211; 2 error(s), 0 warning(s) vc++&#8221;settings&#8221;和“options”都做了修改 可以编译像“hello world&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：winterzhang</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-401</link>
		<dc:creator>winterzhang</dc:creator>
		<pubDate>Fri, 16 Oct 2009 02:47:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-401</guid>
		<description>你好，很抱歉很久没给回复。

一般来说，要更改Environment内存，需要首先注意满足以下条件：

A， mutex的最大值需要足够大， 因为如果不够大的话， mutex将被消耗光， 设置/更改将出错。可以用DB_ENV-&gt;mutex_set_max来更改此值。

B， Cache的最大值需要足够大， 显然应当要大于你动态更改的最大值。可以用DB_ENV-&gt;set_cache_max来设置此值。

而后，在DB_ENV-&gt;open的前后，都可以调用DB_ENV-&gt;set_cachesize来设置内存的大小，也可以通过DB_ENV-&gt;get_cachesize来获得内存的大小。设置的与获得的并非完全一致，二者之间有一些差别，具体解释如下：

1 首次创建环境(即首次产生__db.001等文件)：如果在DB_ENV-&gt;open之前未调用DB_ENV-&gt;set_cachesize来设置大小， 则默认的cachesize是256KB， nchache是1。如果有设置，当设置的cachesize&lt;500MB时， 实际的cachesize大约是设置大小的1.25倍，否则，比实际值大一点点。ncache和设置的相同。创建环境以后，在环境目录下会有ncache个region文件。文件大小(regsize)略大于实际cachesize/ncache，这个大小是不会变化的，以后新增加的region文件也是这么大。


2 更改内存大小：如上，当cachesize&lt;500MB， 则会上浮25%，否则保持原值。变化的流程是：a，如果当前要实际设置的cachesize不需要ncache个region文件，则region文件数目会减少，即ncache减小，并且删除多余的region文件。如果需要更多的region文件，则ncache会增加，同时创建更多的region文件。 否则region文件和ncache维持不变。

3 判断是否需要ncache的数目很简单，基本依据是：cachesize大小与ncache-2个总容量, ncache-1个总容量, 以及ncache个总容量的比较关系。

4 get_cachesize获得的gigabyte和cachesize是在创建时候设置的值，而ncache反映的实际的ncache，即region文件的数目。ncache的数目也可以通过对环境目录下的region文件数目分析出来，因为那些文件大小一样， 具体值如1所言。

在这点上, API实际功能和文档上可能有些不一致，后续将证实此情况。 

参考： http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/frame_main.html</description>
		<content:encoded><![CDATA[<p>你好，很抱歉很久没给回复。</p>
<p>一般来说，要更改Environment内存，需要首先注意满足以下条件：</p>
<p>A， mutex的最大值需要足够大， 因为如果不够大的话， mutex将被消耗光， 设置/更改将出错。可以用DB_ENV-&gt;mutex_set_max来更改此值。</p>
<p>B， Cache的最大值需要足够大， 显然应当要大于你动态更改的最大值。可以用DB_ENV-&gt;set_cache_max来设置此值。</p>
<p>而后，在DB_ENV-&gt;open的前后，都可以调用DB_ENV-&gt;set_cachesize来设置内存的大小，也可以通过DB_ENV-&gt;get_cachesize来获得内存的大小。设置的与获得的并非完全一致，二者之间有一些差别，具体解释如下：</p>
<p>1 首次创建环境(即首次产生__db.001等文件)：如果在DB_ENV-&gt;open之前未调用DB_ENV-&gt;set_cachesize来设置大小， 则默认的cachesize是256KB， nchache是1。如果有设置，当设置的cachesize&lt;500MB时， 实际的cachesize大约是设置大小的1.25倍，否则，比实际值大一点点。ncache和设置的相同。创建环境以后，在环境目录下会有ncache个region文件。文件大小(regsize)略大于实际cachesize/ncache，这个大小是不会变化的，以后新增加的region文件也是这么大。</p>
<p>2 更改内存大小：如上，当cachesize&lt;500MB， 则会上浮25%，否则保持原值。变化的流程是：a，如果当前要实际设置的cachesize不需要ncache个region文件，则region文件数目会减少，即ncache减小，并且删除多余的region文件。如果需要更多的region文件，则ncache会增加，同时创建更多的region文件。 否则region文件和ncache维持不变。</p>
<p>3 判断是否需要ncache的数目很简单，基本依据是：cachesize大小与ncache-2个总容量, ncache-1个总容量, 以及ncache个总容量的比较关系。</p>
<p>4 get_cachesize获得的gigabyte和cachesize是在创建时候设置的值，而ncache反映的实际的ncache，即region文件的数目。ncache的数目也可以通过对环境目录下的region文件数目分析出来，因为那些文件大小一样， 具体值如1所言。</p>
<p>在这点上, API实际功能和文档上可能有些不一致，后续将证实此情况。 </p>
<p>参考： <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/frame_main.html" rel="nofollow">http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/frame_main.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：marisa</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-386</link>
		<dc:creator>marisa</dc:creator>
		<pubDate>Thu, 15 Oct 2009 03:51:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-386</guid>
		<description>&lt;a href=&quot;#comment-15&quot; rel=&quot;nofollow&quot;&gt;@jeak&lt;/a&gt; 
我也出现了这个问题，我的解决方法重新编译，我出现的原因是还没有生成成功我就结束了编译，然后重新编译后就出现这个问题。预祝成功</description>
		<content:encoded><![CDATA[<p><a href="#comment-15" rel="nofollow">@jeak</a><br />
我也出现了这个问题，我的解决方法重新编译，我出现的原因是还没有生成成功我就结束了编译，然后重新编译后就出现这个问题。预祝成功</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：winterzhang</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-175</link>
		<dc:creator>winterzhang</dc:creator>
		<pubDate>Wed, 26 Aug 2009 09:42:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-175</guid>
		<description>&lt;a href=&quot;#comment-162&quot; rel=&quot;nofollow&quot;&gt;@LongSky&lt;/a&gt; 
您好, 我们正在研究这个问题, 并将尽快给您答复.</description>
		<content:encoded><![CDATA[<p><a href="#comment-162" rel="nofollow">@LongSky</a><br />
您好, 我们正在研究这个问题, 并将尽快给您答复.</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：LongSky</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-162</link>
		<dc:creator>LongSky</dc:creator>
		<pubDate>Thu, 20 Aug 2009 06:06:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-162</guid>
		<description>请问应该如何使用dbenv-&gt;set_cachesize 来动态的更改数据库的内存,我尝试过很多方法都不能动态设置</description>
		<content:encoded><![CDATA[<p>请问应该如何使用dbenv-&gt;set_cachesize 来动态的更改数据库的内存,我尝试过很多方法都不能动态设置</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：ArthurWang</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-93</link>
		<dc:creator>ArthurWang</dc:creator>
		<pubDate>Fri, 10 Jul 2009 08:03:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-93</guid>
		<description>我用的是Windows环境，VS2008，管理员权限，那个路径设置成相对路径就没事儿，可能是由于源代码是在Linux环境下编写的，路径格式不同吧。。
谢谢您的解答！</description>
		<content:encoded><![CDATA[<p>我用的是Windows环境，VS2008，管理员权限，那个路径设置成相对路径就没事儿，可能是由于源代码是在Linux环境下编写的，路径格式不同吧。。<br />
谢谢您的解答！</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：winterzhang</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-92</link>
		<dc:creator>winterzhang</dc:creator>
		<pubDate>Thu, 09 Jul 2009 06:25:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-92</guid>
		<description>你好, 鉴于你将环境目录设置为/testEnv, 我想知道一下你是用什么用户来运行该示例程序的, 是root用户还是其他的普通用户? 如果是其他用户, 请确认一下是否该用户可以向/testEnv里面添加文件. 因为正常情况下,打开环境的时候, 会在环境文件夹下创建若干文件.

一般情况下, 用root用户创建的文件夹可以被其他用户读(cd/ls),.但是, 要让普通用户可以往该文件夹放文件, 还需要用chmod设置一下文件夹的mode.</description>
		<content:encoded><![CDATA[<p>你好, 鉴于你将环境目录设置为/testEnv, 我想知道一下你是用什么用户来运行该示例程序的, 是root用户还是其他的普通用户? 如果是其他用户, 请确认一下是否该用户可以向/testEnv里面添加文件. 因为正常情况下,打开环境的时候, 会在环境文件夹下创建若干文件.</p>
<p>一般情况下, 用root用户创建的文件夹可以被其他用户读(cd/ls),.但是, 要让普通用户可以往该文件夹放文件, 还需要用chmod设置一下文件夹的mode.</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：ArthurWang</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-80</link>
		<dc:creator>ArthurWang</dc:creator>
		<pubDate>Wed, 08 Jul 2009 12:01:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-80</guid>
		<description>#include 
#include 
#include 

int main(int argc, char *argv)
{
	u_int32_t	env_flags = DB_CREATE &#124; DB_INIT_MPOOL;
	std::string envHome(&quot;/testEnv&quot;);
	DbEnv myEnv(0);

	try{
		myEnv.open(envHome.c_str(), env_flags, 0);
	}
	catch(DbException &amp;e){
		std::cerr&lt;&lt;&quot;Error openning database environment 1:&quot;&lt;&lt;envHome&lt;&lt;std::endl;
		std::cerr&lt;&lt;e.what()&lt;&lt;std::endl;
		exit(-1);
	}
	catch(std::exception &amp;e){
		std::cerr&lt;&lt;&quot;Error openning database environment 2:&quot;&lt;&lt;envHome&lt;&lt;std::endl;
		std::cerr&lt;&lt;e.what()&lt;&lt;std::endl;
		exit(-1);
	}

	std::cout&lt;&lt;&quot;This operarion is completed...&quot;&lt;&lt;std::endl;
}

上面代码中的envHome怎么设置才能正确生成数据库环境呢？我创建了envHome文件夹也不行。。谢谢！</description>
		<content:encoded><![CDATA[<p>#include<br />
#include<br />
#include </p>
<p>int main(int argc, char *argv)<br />
{<br />
	u_int32_t	env_flags = DB_CREATE | DB_INIT_MPOOL;<br />
	std::string envHome(&#8220;/testEnv&#8221;);<br />
	DbEnv myEnv(0);</p>
<p>	try{<br />
		myEnv.open(envHome.c_str(), env_flags, 0);<br />
	}<br />
	catch(DbException &amp;e){<br />
		std::cerr&lt;&lt;&#8221;Error openning database environment 1:&#8221;&lt;&lt;envHome&lt;&lt;std::endl;<br />
		std::cerr&lt;&lt;e.what()&lt;&lt;std::endl;<br />
		exit(-1);<br />
	}<br />
	catch(std::exception &amp;e){<br />
		std::cerr&lt;&lt;&#8221;Error openning database environment 2:&#8221;&lt;&lt;envHome&lt;&lt;std::endl;<br />
		std::cerr&lt;&lt;e.what()&lt;&lt;std::endl;<br />
		exit(-1);<br />
	}</p>
<p>	std::cout&lt;&lt;&#8221;This operarion is completed&#8230;&#8221;&lt;&lt;std::endl;<br />
}</p>
<p>上面代码中的envHome怎么设置才能正确生成数据库环境呢？我创建了envHome文件夹也不行。。谢谢！</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：nemo</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-79</link>
		<dc:creator>nemo</dc:creator>
		<pubDate>Tue, 07 Jul 2009 13:41:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-79</guid>
		<description>我原先重装过系统，但是bdb的目录还在，所以我只是添加了系统的path便由6.0转到2008，结果出了以上的问题。今日听君一语，终于决定重装bdb，再重新编译，现在已经解决了。感谢！！！</description>
		<content:encoded><![CDATA[<p>我原先重装过系统，但是bdb的目录还在，所以我只是添加了系统的path便由6.0转到2008，结果出了以上的问题。今日听君一语，终于决定重装bdb，再重新编译，现在已经解决了。感谢！！！</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：Winter Zhang</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/comment-page-1/#comment-76</link>
		<dc:creator>Winter Zhang</dc:creator>
		<pubDate>Mon, 06 Jul 2009 07:02:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=244#comment-76</guid>
		<description>&lt;blockquote cite=&quot;#commentbody-71&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-71&quot; rel=&quot;nofollow&quot;&gt;nemo&lt;/a&gt; :&lt;/strong&gt;
你好，我请教一个问题，我在vs2008上编译完成，但是在测试doc文档中的一些代码时，发现：C++语言的可以过去，但是c语言的都过不去，总是出现一些奇怪的提示。
如：
#include 
…
Db db(NULL, 0);               // Instantiate the Db object
u_int32_t oFlags = DB_CREATE; // Open flags;
try {
    // Open the database
    db.open(NULL,                // Transaction pointer
            “my_db.db”,          // Database file name
            NULL,                // Optional logical database name
            DB_BTREE,            // Database access method
            oFlags,              // Open flags
            0);                  // File mode (using defaults)
// DbException is not subclassed from std::exception, so
// need to catch both of these.
} catch(DbException &amp;e) {
    // Error handling code goes here
} catch(std::exception &amp;e) {
    // Error handling code goes here
} 测试可以通过，但是与它对应的c语言版本的
#include  
…
DB *dbp;           /* DB structure handle */
u_int32_t flags;   /* database open flags */
int ret;           /* function return value */
/* Initialize the structure. This
 * database is not opened in an environment,
 * so the environment pointer is NULL. */
ret = db_create(&amp;dbp, NULL, 0);
if (ret != 0) {
  /* Error handling goes here */
}
/* Database open flags */
flags = DB_CREATE;    /* If the database does not exist,
                       * create it.*/
/* open the database */
ret = dbp-&gt;open(dbp,        /* DB structure pointer */
                NULL,       /* Transaction pointer */
                “my_db.db”, /* On-disk file that holds the database. */
                NULL,       /* Optional logical database name */
                DB_BTREE,   /* Database access method */
                flags,      /* Open flags */
                0);         /* File mode (using defaults) */
if (ret != 0) {
  /* Error handling goes here */
}却出现这个提示：
DB-&gt;put: method not permitted before handle’s open method。
c和c++版的对应代码都有类似的情况：c++通得过，c通不过。
我在用vs6.0时，也发现这个错误，但是自从我把buildwindows\release下的libdb47.dll拷贝到bin文件夹下后，已经解决问题了。现在转到vs2008下面发现这个办法不灵了。。。。。
不知何故。
希望你帮我看一下，感激不尽！！！
&lt;/blockquote&gt;

你好, 基本上,这个错误的是因为:机器上装有多个版本的BDB, 运行时链接的库和编译期的库不同. 

建议首先检查一下编译使用的BDB库文件的位置和版本,然后检查一下程序运行时使用的PATH变量, 看看其中是否包含其他位置/版本的BDB的动态链接库.</description>
		<content:encoded><![CDATA[<blockquote cite="#commentbody-71"><p>
<strong><a href="#comment-71" rel="nofollow">nemo</a> :</strong><br />
你好，我请教一个问题，我在vs2008上编译完成，但是在测试doc文档中的一些代码时，发现：C++语言的可以过去，但是c语言的都过不去，总是出现一些奇怪的提示。<br />
如：<br />
#include<br />
…<br />
Db db(NULL, 0);               // Instantiate the Db object<br />
u_int32_t oFlags = DB_CREATE; // Open flags;<br />
try {<br />
    // Open the database<br />
    db.open(NULL,                // Transaction pointer<br />
            “my_db.db”,          // Database file name<br />
            NULL,                // Optional logical database name<br />
            DB_BTREE,            // Database access method<br />
            oFlags,              // Open flags<br />
            0);                  // File mode (using defaults)<br />
// DbException is not subclassed from std::exception, so<br />
// need to catch both of these.<br />
} catch(DbException &amp;e) {<br />
    // Error handling code goes here<br />
} catch(std::exception &amp;e) {<br />
    // Error handling code goes here<br />
} 测试可以通过，但是与它对应的c语言版本的<br />
#include<br />
…<br />
DB *dbp;           /* DB structure handle */<br />
u_int32_t flags;   /* database open flags */<br />
int ret;           /* function return value */<br />
/* Initialize the structure. This<br />
 * database is not opened in an environment,<br />
 * so the environment pointer is NULL. */<br />
ret = db_create(&amp;dbp, NULL, 0);<br />
if (ret != 0) {<br />
  /* Error handling goes here */<br />
}<br />
/* Database open flags */<br />
flags = DB_CREATE;    /* If the database does not exist,<br />
                       * create it.*/<br />
/* open the database */<br />
ret = dbp-&gt;open(dbp,        /* DB structure pointer */<br />
                NULL,       /* Transaction pointer */<br />
                “my_db.db”, /* On-disk file that holds the database. */<br />
                NULL,       /* Optional logical database name */<br />
                DB_BTREE,   /* Database access method */<br />
                flags,      /* Open flags */<br />
                0);         /* File mode (using defaults) */<br />
if (ret != 0) {<br />
  /* Error handling goes here */<br />
}却出现这个提示：<br />
DB-&gt;put: method not permitted before handle’s open method。<br />
c和c++版的对应代码都有类似的情况：c++通得过，c通不过。<br />
我在用vs6.0时，也发现这个错误，但是自从我把buildwindows\release下的libdb47.dll拷贝到bin文件夹下后，已经解决问题了。现在转到vs2008下面发现这个办法不灵了。。。。。<br />
不知何故。<br />
希望你帮我看一下，感激不尽！！！
</p></blockquote>
<p>你好, 基本上,这个错误的是因为:机器上装有多个版本的BDB, 运行时链接的库和编译期的库不同. </p>
<p>建议首先检查一下编译使用的BDB库文件的位置和版本,然后检查一下程序运行时使用的PATH变量, 看看其中是否包含其他位置/版本的BDB的动态链接库.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
Դ