1. 程式人生 > >windows下qpid-cpp 1.38.0編譯實錄

windows下qpid-cpp 1.38.0編譯實錄

一、編譯環境

1、vs2017社群版15.5.3 ,.NET Framework 4.7.03056

2、從www.boost.org上下載boost 1.68.0原始碼

3、從qpid.apache.org下載qpid proton 0.26.0 ,qpid c++ broker 1.38.0

4、從www.cmake.org上下載windows版的壓縮包,直接解壓就可以了。我下載的是3.13.0-rc1 win64版本

5、從http://www.slproweb.com/products/Win32OpenSSL.html上下載OpenSSL,我下載的是32位版本,然後安裝。安裝在自己的目錄,不要安裝在系統目錄

6、從www.python.org上下載 2.7.15版本,32位的安裝程式。

7、從http://www.doxygen.nl/ 上下載doxygen的windows的32位版本

8、從http://www.ruby-lang.org上下載ruby的32位windows的安裝程式,注意是x86不是x64。我建議直接下載7z的打包不是exe。

9、從www.swig.org上下載swigwin-3.0.12,無需安裝,直接解壓到本地。再將路徑加入到PATH環境變數。

 

二、環境確認

1、開啟cmd命令視窗

2、執行 python -V,如果正確輸出"Python 2.7.15",則結束。如果沒有,請將python的安裝路徑加入環境變數PATH。再重啟cmd,後重新執行以上命令。注意:V是大寫。

3、執行ruby -v ,如果正確輸出 ruby 2.5.3xxxx,則結束。確認有【i386-mingw32】字樣,保證是32位版本的。

4、執行swig -version,注意是一個橫槓。如果輸出"SWIG Version 3.0.12"結束。否則,請將執行路徑加入PATH環境變數。

5、執行doxygen -v,如果正確輸出 1.18.4,則結束。

 

三、編譯proton

1、寫在所有之前:在正式編譯之前,請先進入${RUBY_ROOT}\lib目錄,將原來libmsvcrt-ruby250.dll.a拷貝複製一份,修改新檔案的檔名為mscrt-ruby253.lib。這樣可以騙過cmake的指令碼。

2、開啟cmake-gui,輸入source path和build path。再點選configure按鈕。

3、如下圖,見高亮部分,這個目錄事關編譯qpid-cpp成功的關鍵。

目錄E:/qpid/qpid-cp-1.38.0是我放qpid原始碼的,qpid-proton是我準備安裝proton的地方,請記住,這個名字最好不要改,否則後面有麻煩。

4、點選按鈕"Configure",等到cmake底部輸出Configuring done之後,再點選"Generate"。等到輸出"Generating done"之後,工程就生成完畢。

5、用vs2017開啟E:/qpid/qpid-proton-0.26.0/build目錄下的Proton.sln,編譯ALL_BUILD專案,完成之後再編譯INSTALL專案。INSTALL專案實際上輸出proton結果到CMAKE_INSTALL_PREFIX目錄。

6、檢查CMAKE_INSTALL_PREFIX是否有東西。有則說明編譯成功

 

四、編譯boost專案

1、解壓boost 1.68.0的原始碼到E:/boost_1_68_0,這是我的解壓路徑,後面都是按這個路徑來。

2、進入目錄E:/boost_1_68_0,執行bootstrap.bat,生成b2.

3、執行b2 --link=shared,請注意加入--link=shared,因為qpid-cpp的預設引入的是動態庫,而不是靜態庫。

4、注意點:這裡不使用boost 1.58.0,因為我的機器上同時裝有vs2008,還有vs2017,死活都使用vs2008。

 

五、編譯qpid-cpp專案

1、再次開啟cmake-gui,輸入source path 和build path。我的原始碼路徑在E:/qpid/qpid-cpp-1.38.0,build路徑也在該目錄下。點選"Configure"按鈕,暫時通不過。

2、敲黑板,畫重點了。進入上面Proton的安裝路徑E:\qpid\qpid-cpp-1.38.0\qpid-proton,將該目錄下的lib\cmake\Proton中ProtonConfig.cmake和ProtonConfigVersion.cmake拷貝到E:\qpid\qpid-cpp-1.38.0\qpid-proton中。

3、見下圖,不需要的配置就取消。一定要記住,將下圖中高亮部分也取消了。

4、再次點選"Configure"按鈕,等配置完成後,再點選"Generate"按鈕,就可以生成目標工程檔案。

5、使用vs2017開啟E:\qpid\qpid-cpp-1.38.0\build目錄下的qpid-cpp.sln解決方案。

6、敲黑板,畫重點了。開啟qpidcomm工程,找到原始碼Logger.cpp,定位到第48行。

原來有一行程式碼:sys::PODMutex loggerLock = QPID_MUTEX_INITIALIZER;

改成sys::PODMutex loggerLock ; //= QPID_MUTEX_INITIALIZER;

這個靜態賦值在boost_1_68_0中不合法。

7、參照之前的步驟,點選Configure和Generate按鈕。然後使用vs2017開啟qpid-cpp.sln,編譯ALL_BUILD專案。

8、到build\src\Debug目錄下檢查是否有一堆dll和lib檔案。

 

六、編後語

開源專案的編譯是個很繁瑣的事情,即使如qpid這個專案,是apache的頂級專案,也是如此。究其原因,我猜測是windows系統的天然鄙視。話說回來,我還是傾向於在windows下寫程式碼和除錯,在linux下執行,便利和效能兼得。如果有什麼問題,可以聯絡我。費了很大的勁才搞定。