使用Visual C++ 2005对Oracle BerkeleyDB 进行最小化编译
1 最小化编译(Small Build)介绍
在 使用Visual C++ 2005编译Oracle Berkeley DB中, 我们介绍了如何用Visual C++ 2005来编译BerkeleyDB的通用库以及相应工具、例子的过程。 所谓通用,是指所有功能都被开启了,这是默认的配置。 但是, 默认配置对于某些特定场景来说,是冗余的。 举例来说, 嵌入式设备的内存有限, 要求运行的程序使用尽量少的内存;另一方面,许多嵌入式设备上不具备某些功能, 比如网络访问,多线程支持, 加密支持等等,因而Berkeley DB提供的相关功能不是必须的。 一句话,为了满足某些特殊使用场景, Berkeley DB提供了Small Build选项。
Small Build是指编译一个精简的函数库以及相应的工具、例子, 它是对通用编译的精简化。 首先, 通用编译会提供4中存取方法:Btree、Hash、Queue、Recno,但是在small Build中, 只提供了对Btree的支持。 其次, Small Build取消了以下功能:CRYPTO(加密/解密支持)、Replication(高可用性支持)、Verify(存取方法验证支持)。 通过这些精简化, Berkeley DB大大降低了编译后生成的类库的大小。
本文介绍了如何在Windows上用VC++2005 编译Oracle Berkeley DB 4.7.25 Small Build版本。
关于下载BerkeleyDB以及用VC++2005打开工程BerkeleyDB的工程文件,请参见使用Visual C++ 2005编译Oracle Berkeley DB。
2 编译Small Library(最小化函数库)
打开工程文件之后,选择编译类型(本文是Release x86 Win32),鼠标右键单击项目db_small, 选择build,就开始编译Small Library了。

编译完成之后,就可以看到产生的Small Library了。Release编译类型产生的文件名为:libdb_small47s.lib。

3 基于Small Library编译工具程序和示例程序。
默认情况下,各种工具程序(db_deadlock等等)和示例程序(ex_access等等)都是依赖于通用函数库,而不是Small Library。但实际上,依赖于Small Library,他们也能正确运行。通常,为了验证Small Library的正确性,以及在嵌入式设备上诊断信息,也需要基于Small Library编译出这些程序。但是,在直接点击一个项目build之前,需要对这个项目作若干必要配置更改。下面就以编译db_deadlock来说明这个过程。
3.1 修改依赖性
默认情况下,db_deadlock项目依赖于db_dll(通用函数库),这里要改成对db_small的依赖。具体操作过程是:鼠标单击选中工程文件,而后选择菜单 Project->Project Dependencies, 选择Dependencies页, 在Projects下拉列表中选择db_deadlock, 在Depends on中,将db_dll前的勾去掉,并在db_small前面打勾。

3.2 修改项目属性
默认情况下,db_deadlock项目使用通用的设置进行编译,要使用Small Library,并且要使得程序基于Small Library能够顺利编译,需要修改一下项目的某些属性。右键单击db_deadlock,选择properties就可以看到db_deadlock的属性页,选择并展开Configuration Properties就可以看到有许多分类,本处要修改的两个属性分别位于C/C++和Linker这两个分类之中。
3.2.1 使用最小化设置来编译该项目。
展开C/C++分类,选择Command Line, 而后在右边的Additional options空白中填入/D “HAVE_SMALLBUILD”

3.2.2 修改依赖的库文件,让db_deadlock使用编译出来的Small Library。
展开Linker分类,选择Input,在右边的Additional Dependencies中,用libdb_small47s.lib覆盖原有内容(libdb47.lib)。

完成这些修改之后,如同编译db_small一样,右键单击db_deadlock,而后选择build,就编译出了基于Small Library的db_deadlock程序了。
4 运行示例程序
ex_access是Oracle Berkeley DB自带的一个示例程序, 该程序将用户输入的字符串作为关键字(key),将字符串倒置作为数据(data),而后将此键值对存入BerkeleyDB数据库。 当用户键入exit时,该程序将显示数据库的内容, 而后退出。以和db_deadlock相同的方式,修改ex_access项目, 而后再编译ex_access项目,就编译出基于Small Library的ex_access,可以运行它来验证一下Small Library的正确性。

5 总结
在掌握了用VC++2005对BerkeleyDB进行通用编译的方法之后,进行最小化编译也是比较容易的。 如果读者出现什么问题,可以与我进行交流。
最近评论