zoukankan      html  css  js  c++  java
  • windows下编译leveldb

    前提条件,下载boost库并编译

    boost库弄好后,就可以编译leveldb了

    首先,下载leveldb-windows,这个github上有

    一。

    1文件-》新建-》从现有代码文件创建新项目

    打开 从现有代码文件创建新项目 向导窗口

    2要创建什么类型的项目? 选择Visual C++

    3项目文件位置 选择源码所在位置leveldb-windows文件夹所在位置 

    这里源码文件在E:AA--masterleveldb-master目录中,所以使用的是E:AA--masterleveldb-maste

    4项目名称填写 LevelDB

    5使用Visual Studio 项目类型选择 静态库(LIB)项目

    如果静态库(LIB)项目没有导入成功,可以先选择Windows应用程序项目
    6 在设置"调试"配置的设置 中 
    预处理器定义 填写LEVELDB_PLATFORM_WINDOWS;OS_WIN

    包括搜索路径 填写E:LIBleveldb-windows;E:LIBleveldb-windowsinclude

    7完成导入

    二。检查配置部分

      Boost库在E:LIBoost64目录下,在项目的属性页中 配置成64位平台

    把需要包含的leveldb,boost的头文件包含进去,boost的lib也包含进去

      

    (手动从项目中排除所有的 *_test.cc 和*_bench.cc 文件,从项目里面移除所有 xxx_text.c c xxxx_bench.cc 测试和性能测试相关源文件。本文编译时没做括号中这部分)

    排除其他平台的文件
    port/port_android.cc
    port/port_posix.cc

    util/env_posix.cc

    三。修改源码

    1.dbc.cc文件中头文件unistd.h
    unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。是Unix Standard的缩写。

    windows下不支持.直接注释即可

    2.portport.h文件中
    注明使用的是windows系统
    在预编译中增加
    #elif defined(LEVELDB_PLATFORM_WINDOWS)

    #include "port/port_win.h"

    四。编译过程中遇到的问题:

    1.无法打开包括文件:“sys/mman.h”: No such file ordirectory

    第一次编译出现这个问题,第二次重新导入工程重做的时候没有出现这个问题。可能是因为第一次没有排除port/port_posix.cc文件。

    2.无法打开包括文件:“pthread.h”: No such file or directory

    下载最新版本pthreads-w32-2-9-1,下载后解压,可以看到共有三个文件夹,用到的主要是“Pre-built.2”这个文件夹下的三个文件夹,分别是动态链接库、头文件、静态链接库;然后配置头文件及静态链接库,配置动态链接库。

    https://blog.csdn.net/qianchenglenger/article/details/16907821

    3.无法打开包括文件:“sqlite3.h”: No such file or directory

    下载sqlite3.h,并在配置中包含进去

    https://www.cnblogs.com/superbi/p/4980127.html

    4.无法打开包括文件:“kcpolydb.h”: No such file or directory

    http://fallabs.com/kyotocabinet/winpkg/

    下载kcpolydb.h,并在配置时包含进去

    5.无法打开包括文件:“endian.h”: Nosuch file or directory

    endian.h是Linux下编译涉及的头文件,在Windows中编译,不需要此头文件。

    6.VS2012:"snprintf"找不到标识符

    https://blog.csdn.net/shhdgl/article/details/41900045

    snprintf()函数的格式跟printf差不多一样,是在c里面用的函数,包含在 #include <stdio.h>头文件中。

    但snprintf()函数并不是标准c/c++中规定的函数,所以在许多编译器中,厂商提供了其相应的实现的版本。在gcc中,该函数名称就snprintf(),而在VS中称为_snprintf。 所以在需要使用snprintf()时改成_snprintf就可以了,或者在预编译处加入:

    #if _MSC_VER

    #define snprintf _snprintf

    #endif

    7. dirent.h可以在windows下用吗

    下载dirent-master,把头文件包括进去

    然后就可以编译生成LevelDB.lib

    在使用的时候,除了leveldb的头和静态库,还需要下面几个boost的库

    libboost_date_time-vc120-mt-gd-x64-1_67.lib
    libboost_filesystem-vc120-mt-gd-x64-1_67.lib
    libboost_system-vc120-mt-gd-x64-1_67.lib
    libboost_thread-vc120-mt-gd-x64-1_67.lib
    libboost_chrono-vc120-mt-gd-x64-1_67.lib

  • 相关阅读:
    Linux下查看系统版本号信息的方法(转载)
    tomcat 启动超级慢
    新生代老年代GC组合
    GC 提前晋升
    Mysql 锁技术要点【转载】
    第39天:字符串连接、截取操作
    第38天:运算符、字符串对象常用方法
    第37天:小米手机图片展示
    第36天:倒计时:发动短信验证、跳转页面、关闭广告
    第35天:时钟效果
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/9288660.html
Copyright © 2011-2022 走看看