下载Boost
https://www.boost.org/users/download/
编译Boost
- 打开windows左下角菜单按钮
- 搜索本机工具命令提示符
- 选择x64版本打开
- 在控制台内直接输入你的boost根地址(不加cd)
- 键入 bootstrap.bat ,运行该批处理
- bootstrap.bat生成了一些文件,其中包括b2.exe
键入 b2.exe runtime-link=static,这里生成的是(sgd的lib,如果不加则生成gd的lib,具体的区别可以参考https://stackoverflow.com/questions/6014517/whats-the-difference-between-mt-gd-and-mt-s-library),生成lib的过程会持续很长时间,玩局游戏吧!
配置LevelDB环境
这里使用VS2017进行操作
- 配置属性 -> C/C++ -> 常规 -> 附加包含目录中添加 boost的根目录
- 配置属性 -> 链接器 -> 常规 -> 附加库目录中添加 boost根目录下的stage\lib目录
- clone leveldb 项目
git clone https://github.com/google/leveldb.git
git checkout windows - 用VS引入LevelDB项目,选择应用程序
- 在配置属性 -> C/C++ -> 常规 -> 附加包含目录添加
leveldb根目录,leveldb/include,boost根目录 - 在配置属性 -> C/C++ -> 预处理器-> 预处理器定义中添加LEVELDB_PLATFORM_WINDOWS; OS_WIN两个宏,并将_WINDOWS改成_CONSOLE
- 从项目中删除
port/port_android.cc
port/port_posix.cc
util/env_posix.cc
doc/db_bench_tree_db.cc
doc/db_bench_sqlite3.cc
db/c_test.c
*_test.cc
*_bench.cc - 修改port/port.h文件
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
#ifndef STORAGE_LEVELDB_PORT_PORT_H_
#define STORAGE_LEVELDB_PORT_PORT_H_
#include <string.h>
// Include the appropriate platform specific file below. If you are
// porting to a new platform, see "port_example.h" for documentation
// of what the new port_<platform>.h file must provide.
#if defined(LEVELDB_PLATFORM_POSIX)
# include "port/port_posix.h"
#elif defined(LEVELDB_PLATFORM_CHROMIUM)
# include "port/port_chromium.h"
#elif defined(LEVELDB_PLATFORM_ANDROID)
# include "port/port_android.h"
#elif defined(LEVELDB_PLATFORM_WINDOWS)
#include "port/port_win.h"
#endif
#endif // STORAGE_LEVELDB_PORT_PORT_H_
9.添加unistd.h
#pragma once
/** This file is part of the Mingw32 package.
* unistd.h maps (roughly) to io.h
*/
#ifndef _UNISTD_H
#define _UNISTD_H
#include <io.h>
#include <process.h>
#endif /* _UNISTD_H */
10.将port_win.h中的(如下代码)注掉
#define snprintf _snprintf
11.编写一个测试用例
#include "leveldb/db.h"
#include "db/db_impl.h"
#include "db/filename.h"
#include "db/version_set.h"
#include "db/write_batch_internal.h"
#include "leveldb/cache.h"
#include "leveldb/env.h"
#include "leveldb/table.h"
#include "port/port.h"
#include "util/hash.h"
#include "util/logging.h"
#include "util/mutexlock.h"
#include "util/testharness.h"
#include "util/testutil.h"
#include <cassert>
#include <iostream>
int main() {
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "lev", &db);
//std::cout << "connect status : " << status.ok() << std::endl;
db->Put(leveldb::WriteOptions(), "say", "hello leveldb");
std::string val = "";
db->Get(leveldb::ReadOptions(), "say", &val);
std::cout << val << std::endl;
}
12.运行
>leveldb.exe
hello leveldb
网友评论