2012-11-09

在 Windows(Cygwin) 环境下编译 levelDB

Views: 26775 | Add Comments

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

Related posts:

  1. 将LevelDB数据导入SSDB
  2. SSDB 解决了 Snappy 导致 LevelDB 编译失败的问题
  3. LevelDB 会丢数据吗?
  4. LevelDB 写操作出现停顿的问题分析
  5. SSDB – 支持 zset 的 LevelDB 服务器
Posted by ideawu at 2012-11-09 14:55:12 Tags:

Leave a Comment