Win7下編譯mosquitto原始碼
在windows下編譯mosquitto原始碼使用的工具包括:
1、visual studio 2010(用vs .net 2003的編譯器時cmake會提示未識別的c或c++編譯器)
2、cmake 3.1.0(這裡是最新的版本,稍微舊一點的版本應該也可以)
3、mosquitto1.3.5原始碼(官網上有下)
4、OpenSSL開發庫(主要是給mosquitto提供SSL支援)
5、POSIX threads for win32(mosquitto的threading支援)
cmake+vs2010編譯原始碼
(1)首先要將mosquitto原始碼解壓到指定資料夾。
(2)然後在cmake gui的Browse Source選項中指定mosquitto原始碼所在目錄。
(3)在cmake gui的browse build選項中指定編譯後的檔案輸出目錄,假設該目錄是build。
(4)修改mosquitto根目錄下的CMakeLists.txt檔案,將最開始的一行改成
set(CMAKE_LEGACY_CYGWIN_WIN32 1)
這個是指定平臺的選項,如果擔心還不能有效指定平臺,可以在下面顯示的設定win32平臺,語法如下
set (VERSION 1.3.5)
set (WIN32 1)
這是cmake的語法,還是比較好懂的。
(5)點cmake gui下面的configure選項,會提示配置編譯器,選擇visual studio 2010的編譯器,確定之後就會生成配置檔案。點generate選項就會在build目錄下生成visual studio 2010的工程檔案。注意,在沒有安裝OpenSSL開發庫和pthread之前要在配置選項中勾掉這兩個選項(WITH_TLS、WITH_TLS_PSK和WITH_THREADING)。
在這個過程中,可能會提示“LINK : fatal error LNK1123: 轉換到 COFF 期間失敗: 檔案無效或損壞”錯誤,這是因為電腦裡面有兩個cvtres檔案。解決方法參考:http://blog.csdn.net/tracyliang223/article/details/20471507
一般來說,兩個cvtres檔案分別在visual studio 2010的安裝目錄下面VC\bin\資料夾下和C:\windows\microsoft.net\framework\v\目錄下,檢視屬性-詳細資訊-版本號,刪除或者重新命名比較舊的版本就可以了。
(6)進入build目錄,用visual studio 2010開啟mosquitto的工程檔案(sln檔案)即可編譯了。
新增OpenSSL支援
參考的文章主要是這個:https://software.intel.com/zh-cn/blogs/2013/12/22/windows-openssl
以上兩個安裝都比較簡單,預設配置就可以了。
從官網http://www.openssl.org/ 下載OpenSSL原始碼。解壓縮到任意一個資料夾。然後在C盤根目錄下建立了一個openssl資料夾,作為將來的安裝目錄,這樣就不用修改mosquitto程式碼裡面的include <openssl/>了。
開啟windows的dos命令列工具。進入到OpenSSL原始碼所在目錄。
(1)首先進行配置,在命令列輸入命令:perl Configure VC-WIN32 --prefix=C:\openssl
最後一項是配置安裝目錄,注意末尾不要再帶"\"了。如果是win64平臺,就要輸入:perl Configure VC-WIN64A --prefix=C:\openssl
(2)搭建編譯環境,在OpenSSL根目錄下執行下面命令:
ms\do_nasm
ms\do_ms
64位平臺將最後一個命令換成ms\do_win64a
(3)編譯。執行命令:nmake -f ms\ntdll.mak
nmake是vs的make工具,如果提示找不到,最好是在環境變數path裡面指定一下nmake的路徑,因為nmake還要呼叫nmake目錄下的編譯工具。
這個過程如果提示錯誤“Nmake fatal error u1077 ”,就將上述命令改成:make /I -f ms\ntdll.mak
這裡/I(大寫的i)選項是強制nmake執行的。參考這裡:http://msdn.microsoft.com/en-us/library/dt309377(VS.71).aspx
(4)安裝。執行nmake -f ms\ntdll.mak install 或者 nmake /I -f ms\ntdll.mak install將OpenSSL開發庫安裝到C:\openssl目錄下。
(5)測試。可以執行:nmake -f ms\ntdll.mak test 或者 nmake /I -f ms\ntdll.mak test 來測試OpenSSL是否安裝成功,成功的話會在最後顯示“passed all tests”。
(6)在cmake裡面將OpenSSL支援開啟,重新configure和generate一下就可以了。
新增pthread支援
pthread本身的Linux平臺的開發庫,但是POSIX threads for win32開源專案給出了其windows平臺下的開源實現。
這是其官網:https://sourceware.org/pthreads-win32/ , 在其官網上下載pthreads-win32 release,解壓到指定目錄即可。
在解壓後的檔案中,將lib資料夾下面的檔案拷貝到vs2010的lib資料夾下,include資料夾下的檔案拷貝到vs2010的include資料夾下。因為pthread本身是不用安裝的,提供的是動態連結庫和靜態連結庫,如果編譯的時候提示找不到pthreadVC2.lib,可以在專案中手動指定目錄,也可以直接將其拷貝到專案的可執行目錄下。
在vs專案中手動指定的方法:右鍵專案名->屬性->配置屬性->連結器->輸入->附加依賴項->編輯,手動輸入pthreadVC2.lib所在目錄就可以了。