levelDB 本身不支持 Windows 平台, 在 Cygwin 里编译的话, 也会报"Unknow platform"错误. 只需要做一下简单修改, 就能在 Windows 下编译和 levelDB. 首先, 要安装 gcc-4, 而不是 gcc-3.
修改 build_detect_platform, 增加 CYGWIN_* 内容:
case "$TARGET_OS" in CYGWIN_*) PLATFORM=OS_LINUX COMMON_FLAGS="$MEMCMP_FLAG -lpthread -DOS_LINUX -DCYGWIN" PLATFORM_LDFLAGS="-lpthread" PORT_FILE=port/port_posix.cc ;;
修改 port/port_posix.h, 增加" || defined(CYGWIN)"内容:
#if defined(OS_MACOSX) || defined(OS_SOLARIS) || defined(OS_FREEBSD) ||\ defined(OS_NETBSD) || defined(OS_OPENBSD) || defined(OS_DRAGONFLYBSD) ||\ defined(OS_ANDROID) || defined(OS_HPUX) || defined(CYGWIN) // Use fread/fwrite/fflush on platforms without _unlocked variants #define fread_unlocked fread #define fwrite_unlocked fwrite #define fflush_unlocked fflush #endif
否则会报错:
util/env_posix.cc:50: error: `fread_unlocked' undeclared (first use this function)
这样就可以编译生成 libleveldb.a 了. 然后创建一个测试文件 a.cpp
#include <iostream> #include "leveldb/db.h" int main(){ leveldb::DB* db; leveldb::Options options; leveldb::Status status; options.create_if_missing = true; status = leveldb::DB::Open(options, "./testdb", &db); std::string key = "abc"; std::string value = "123"; std::string ret; std::cout << value; status = db->Put(leveldb::WriteOptions(), key, value); status = db->Get(leveldb::ReadOptions(), key, &ret); std::cout << ret; return 0; }
编译执行
g++ a.cpp -Iinclude -L. -lleveldb; ./a
相关资料: levelDB 文档中文翻译 http://dirlt.com/leveldb.html