windows下編譯leveldb

來源:互聯網
上載者:User

標籤:而在   htm   動態連結程式庫   win   leveldb   xxx   源檔案   配置   處理器   

前提條件,下載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”這個檔案夾下的三個檔案夾,分別是動態連結程式庫、標頭檔、靜態連結庫;然後配置標頭檔及靜態連結庫,配置動態連結程式庫。

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"找不到標識符

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

windows下編譯leveldb

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.