1. 程式人生 > >Win7下編譯mosquitto原始碼

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所在目錄就可以了。