Windows下利用VS2017编译leveldb

在编译leveldb-windows前,请确保已编译boost。

一、源码地址

leveldb源码下载地址:https://github.com/google/leveldb/tree/windows

二、Project建立

Step 1: 导入文件
  1. File -> New -> Project From Existing Code
  2. 选择创建项目类型,选择Visual C++;点击Next
    在这里插入图片描述
  3. 选择leveldb-windows地址,放置于Project file location; 将Project name起名为LevelDB;点击Next
    在这里插入图片描述
  4. 选择生成的项目类型:Project type: Static library (LIB) project;点击Next
    在这里插入图片描述
  5. 设置调试配置设置:在Preprocessor definitions中填写LEVELDB_PLATFORM_WINDOWS;OS_WIN;点击Next;再点击Finish,完成导入
    在这里插入图片描述
Step 2: 检查配置
  1. 配置打成静态库类型:在Configuration Properties -> General -> Configuration Type中修改为Static library (.lib);点击应用
    在这里插入图片描述
  2. 配置boost和leveldb-windows:
    1)在Configuration Properties -> C/C++ -> General -> Additional Include Directories中加入:
    在这里插入图片描述
    i. boost根目录
    ii. leveldb-windows根目录
    iii. leveldb-windows/include目录
    2)在Configuration Properties -> C/C++ -> Preprocessor中添加:
    在这里插入图片描述
    i. LEVELDB_PLATFORM_WINDOWS
    ii. OS_WIN
    iii. WIN32
    3)在Configuration Properties -> VC++ Directories -> Library Directories中添加:
    在这里插入图片描述
    i. boost/stage/lib
    4)选作:遇到了c++标准库里面.h文件找不到的问题,解决方法参考了:https://blog.csdn.net/qq_34362856/article/details/70230337
    Configuration Properties -> VC++ Directories -> Include Directories中添加:
    i. C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.17134.0\shared;
    ii. C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.17134.0\cppwinrt;
    iii. C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.17134.0\ucrt;
    iv. C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.17134.0\um;
    v. C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.17134.0\winrt
    Configuration Properties -> VC++ Directories -> Library Directories中添加:
    i. C:\Program Files %28x86%29\Windows Kits\10\Lib\10.0.17134.0\ucrt\x64;
    ii. C:\Program Files %28x86%29\Windows Kits\10\Lib\10.0.17134.0\ucrt_enclave\x64;
    iii. C:\Program Files %28x86%29\Windows Kits\10\Lib\10.0.17134.0\um\x64
Step 3: 排除不需要的文件

port_android.cc
port_posix.cc
env_posix.cc
db_bench_sqlite3.cc
db_bench_tree_db.cc
手动删除所有“_test.cc”和“_bench.cc”的文件

Step 4: 必要的源码修改

1)c.cc文件中,注释掉第8行:#include <unistd.h>
2)port.h中,添加:
#elif defined(LEVELDB_PLATFORM_WINDOWS)
#include “port/port_win.h”
在这里插入图片描述
3)port_win.h中,注释掉第34行:
#define snprintf _snprintf

三、编译生成64位的lib

如果顺利,编译直接成功。

四、确认LevelDB编译成功,配置并使用

新建一个solution,用测试源码看是否能够跑通。

Step 1: VS2017下的配置:
  1. Configuration Properties -> VC++ Directories -> Library Directories下,添加:
    i. D:\Open Libraries\boost_1_65_1\stage\lib;
    ii. D:\Open Libraries\leveldb-windows-exp\leveldb-windows\x64\Debug
    依赖boost的lib和已经编译好的LevelDB-windows的静态库
  2. Configuration Properties -> C/C++ -> Additional Include Directories中,添加:
    i. D:\Open Libraries\boost_1_65_1
    ii. D:\Open Libraries\leveldb-windows-exp\leveldb-windows
    iii. D:\Open Libraries\leveldb-windows-exp\leveldb-windows\include
  3. 在Configuration Properties -> Linker -> Input -> Additional Dependencies中,添加:
    LevelDB.lib (需和打出来的库文件名一致)
Step 2: 测试用源码:
#include <iostream> 
#include <leveldb/db.h>

int main()
{
	leveldb::DB* db;
	leveldb::Options options;
	options.create_if_missing = true;
	std::string dbpath = "testdb";
	leveldb::Status status = leveldb::DB::Open(options, dbpath, &db);

	std::string key = "test";
	std::string val = "test_value";

	status = db->Put(leveldb::WriteOptions(), key, val);
	std::cout << status.ok() << std::endl;

	status = db->Get(leveldb::ReadOptions(), key, &val);
	std::cout << status.ok() << std::endl;
	std::cout << val << std::endl;

	status = db->Delete(leveldb::WriteOptions(), key);
	std::cout << status.ok() << std::endl;

	system("pause");
	return 0;
}
Step 3: 编译并运行

若一切顺利,屏幕显示:
在这里插入图片描述
至此,leveldb-windows编译完成。

五、参考

[1] https://blog.csdn.net/ncut_nwpu/article/details/80604356
[2] https://blog.csdn.net/qq_34362856/article/details/70230337

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值