前提條件,下載boost庫並編譯
boost庫弄好后,就可以編譯leveldb了
首先,下載leveldb-windows,這個github上有
一。
1文件-》新建-》從現有代碼文件創建新項目
打開 從現有代碼文件創建新項目 向導窗口
2要創建什么類型的項目? 選擇Visual C++
3項目文件位置 選擇源碼所在位置leveldb-windows文件夾所在位置
這里源碼文件在E:\0AA--master\leveldb-master目錄中,所以使用的是E:\0AA--master\leveldb-maste
4項目名稱填寫 LevelDB
5使用Visual Studio 項目類型選擇 靜態庫(LIB)項目
如果靜態庫(LIB)項目沒有導入成功,可以先選擇Windows應用程序項目
6 在設置"調試"配置的設置 中
預處理器定義 填寫LEVELDB_PLATFORM_WINDOWS;OS_WIN
包括搜索路徑 填寫E:\LIB\leveldb-windows;E:\LIB\leveldb-windows\include
7完成導入
二。檢查配置部分
Boost庫在E:\LIB\boost64目錄下,在項目的屬性頁中 配置成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.db\c.cc文件中頭文件unistd.h
unistd.h 是 C 和 C++ 程序設計語言中提供對 POSIX 操作系統 API 的訪問功能的頭文件的名稱。是Unix Standard的縮寫。
windows下不支持.直接注釋即可
2.port\port.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