標籤:而在 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