Windows10+VS2019环境下使用Mojang LevelDB库遇到错误如何解决?
Windows 10 + Visual Studio 2019 下 Mojang LevelDB 正确使用指南
报错根因
你遇到的DLLX不完整类型报错,本质是Mojang LevelDB默认开启动态库编译,头文件中的导出符号需要额外的宏定义标记才能正确识别,未正确配置的情况下就会出现类型不完整、符号无法识别的问题。
完整配置步骤
1. 编译LevelDB库
拉取源码后通过CMake生成VS2019解决方案,根据你的需求选择编译模式:
- 若使用静态库:CMake生成时添加参数
-DLEVELDB_BUILD_SHARED=OFF,关闭动态库生成,可直接规避DLL相关符号问题 - 若使用动态库:保留默认
LEVELDB_BUILD_SHARED=ON配置即可
注意:LevelDB编译时的运行库版本(项目属性->C/C++->代码生成->运行库)必须和你的业务项目完全一致,MD/MDd对应动态运行库,MT/MTd对应静态运行库,版本不匹配会出现后续链接错误
2. 业务项目配置
打开你的VS项目属性页,按顺序配置以下选项:
- 附加包含目录:在
C/C++ -> 常规 -> 附加包含目录中,添加LevelDB源码根目录下的include文件夹路径 - 附加库目录:在
链接器 -> 常规 -> 附加库目录中,添加LevelDB编译产物中leveldb.lib所在的文件夹路径 - 附加依赖项:在
链接器 -> 输入 -> 附加依赖项中,新增leveldb.lib - 动态库专属配置:如果你选择编译动态库版本,需要在
C/C++ -> 预处理器 -> 预处理器定义中新增LEVELDB_SHARED_LIBRARY,这是解决DLLX不完整类型报错的核心配置
3. 功能测试
你可以使用以下最简代码验证配置是否正确:
#include <leveldb/db.h> #include <iostream> int main() { leveldb::DB* db_instance = nullptr; leveldb::Options opt; opt.create_if_missing = true; leveldb::Status open_status = leveldb::DB::Open(opt, "./test_db", &db_instance); if (!open_status.ok()) { std::cerr << "数据库打开失败: " << open_status.ToString() << std::endl; return -1; } // 测试写入 leveldb::Status write_status = db_instance->Put(leveldb::WriteOptions(), "test_key", "test_value"); if (write_status.ok()) std::cout << "写入成功" << std::endl; // 测试读取 std::string read_result; leveldb::Status read_status = db_instance->Get(leveldb::ReadOptions(), "test_key", &read_result); if (read_status.ok()) std::cout << "读取结果: " << read_result << std::endl; delete db_instance; return 0; }
异常排查
- 若仍出现DLLX不完整类型报错:确认是否添加了
LEVELDB_SHARED_LIBRARY预处理器定义,或者是否混用了动态/静态库的编译产物 - 若出现链接器符号找不到错误:检查运行库版本是否和LevelDB编译时一致,
leveldb.lib是否已经添加到附加依赖项 - 若运行时提示缺少
leveldb.dll:将编译生成的leveldb.dll复制到业务项目生成的exe同目录下即可
内容的提问来源于stack exchange,提问作者Abdrlrahman
相关产品推荐
相关产品推荐

