VS2015中如何配置使用自行编译的Berkeley DB C++库(含STL支持)
解决VS2015接入自行编译的Berkeley DB C++(带STL支持)问题
1. 先确认编译产出的完整性
你编译的是Berkeley_DB_vs2015.sln,得先确保STL相关模块编译成功:
- 打开解决方案后,检查
db_stl项目是否被勾选编译,并且配置是x64 Release(和你的项目配置一致) - 编译完成后,除了
x64\Release下的libdb_stl181.dll、libdb181.lib,还要去源码的include目录确认:里面必须有db_cxx.h,以及dbstl子目录(里面包含dbstl_map.h等STL封装头文件)
2. 配置头文件路径(解决找不到<db_cxx.h>和<dbstl_map.h>的问题)
这是最关键的一步,VS找不到头文件就是因为路径没加对:
- 右键你的项目 → 打开属性面板 → 配置属性 → C/C++ → 常规 → 附加包含目录
- 添加Berkeley DB源码根目录下的
include文件夹路径(比如你解压的db-18.1.40\include,根据实际版本调整) - 要是
include下有dbstl子目录,直接把include/dbstl也加到附加包含目录里,或者确保include路径已经覆盖到这个子目录
3. 配置库文件链接(解决无法使用库元素的问题)
链接库要同时加基础库和STL库:
- 还是在项目属性里,找到配置属性 → 链接器 → 常规 → 附加库目录,添加你编译出来的
x64\Release文件夹路径 - 然后到链接器 → 输入 → 附加依赖项,手动添加
libdb181.lib和libdb_stl181.lib(注意是.lib文件,不是.dll) - 用
#pragma comment的话,要写两行:
但前提是这两个.lib的路径已经被VS识别(要么在附加库目录,要么放在项目的输出目录里)#pragma comment(lib, "libdb181.lib") #pragma comment(lib, "libdb_stl181.lib")
4. 确保编译配置完全对齐
你的项目配置必须和Berkeley DB的编译配置一模一样:
- 平台必须是x64(你编译的是x64版本,不能用x86)
- 配置必须是Release(如果编译的是Debug库,项目也要改成Debug,Debug版库名通常带d,比如
libdb_stl181d.lib) - C标准选ISO C11及以上:在属性面板的C/C++ → 语言 → C++标准里,选
ISO C++11 标准(/std:c++11),和Berkeley DB的编译标准匹配
5. 验证STL功能的使用
配置完后,用这段测试代码验证:
#include <db_cxx.h> #include <dbstl_map.h> int main() { // 创建支持STL的Berkeley DB map dbstl::db_map<int, std::string> my_db_map; my_db_map.open("test_stl_db", DB_CREATE); // 插入STL键值对 my_db_map.insert(std::make_pair(1, "test_stl_data")); // 查找并读取数据 auto iter = my_db_map.find(1); if (iter != my_db_map.end()) { // 这里可以输出或处理数据 } my_db_map.close(); return 0; }
- 运行前记得把
libdb_stl181.dll和libdb181.dll复制到项目的x64\Release输出目录,不然会提示找不到DLL
6. 常见问题排查
- 还是找不到头文件:检查附加包含目录的路径是否写错,有没有包含到
dbstl子目录 - 链接报错:检查附加依赖项是不是同时加了两个库,平台和配置有没有和编译的库对应上
- STL功能报错:确认
db_stl项目编译成功,没有遗漏;或者重新编译一次db_stl项目
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

