windows下編譯leveldb


前提條件,下載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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM