windows下qpid-cpp 1.38.0編譯實(shí)錄2018-10-27

一、編譯環(huán)境

1、vs2017社區(qū)版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位版本,然后安裝。安裝在自己的目錄,不要安裝在系統(tǒng)目錄

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,無(wú)需安裝,直接解壓到本地。再將路徑加入到PATH環(huán)境變量。

二、環(huán)境確認(rèn)

1、打開(kāi)cmd命令窗口

2、執(zhí)行 python -V,如果正確輸出"Python 2.7.15",則結(jié)束。如果沒(méi)有,請(qǐng)將python的安裝路徑加入環(huán)境變量PATH。再重啟cmd,后重新執(zhí)行以上命令。注意:V是大寫(xiě)。

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

4、執(zhí)行swig -version,注意是一個(gè)橫杠。如果輸出"SWIG Version 3.0.12"結(jié)束。否則,請(qǐng)將執(zhí)行路徑加入PATH環(huán)境變量。

5、執(zhí)行doxygen -v,如果正確輸出 1.18.4,則結(jié)束。

三、編譯proton

1、寫(xiě)在所有之前:在正式編譯之前,請(qǐng)先進(jìn)入${RUBY_ROOT}\lib目錄,將原來(lái)libmsvcrt-ruby250.dll.a拷貝復(fù)制一份,修改新文件的文件名為mscrt-ruby253.lib。這樣可以騙過(guò)cmake的腳本。

2、打開(kāi)cmake-gui,輸入source path和build path。再點(diǎn)擊configure按鈕。

3、如下圖,見(jiàn)高亮部分,這個(gè)目錄事關(guān)編譯qpid-cpp成功的關(guān)鍵。

目錄E:/qpid/qpid-cp-1.38.0是我放qpid源碼的,qpid-proton是我準(zhǔn)備安裝proton的地方,請(qǐng)記住,這個(gè)名字最好不要改,否則后面有麻煩。

4、點(diǎn)擊按鈕"Configure",等到cmake底部輸出Configuring done之后,再點(diǎn)擊"Generate"。等到輸出"Generating done"之后,工程就生成完畢。

5、用vs2017打開(kāi)E:/qpid/qpid-proton-0.26.0/build目錄下的Proton.sln,編譯ALL_BUILD項(xiàng)目,完成之后再編譯INSTALL項(xiàng)目。INSTALL項(xiàng)目實(shí)際上輸出proton結(jié)果到CMAKE_INSTALL_PREFIX目錄。

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

四、編譯boost項(xiàng)目

1、解壓boost 1.68.0的源碼到E:/boost_1_68_0,這是我的解壓路徑,后面都是按這個(gè)路徑來(lái)。

2、進(jìn)入目錄E:/boost_1_68_0,執(zhí)行bootstrap.bat,生成b2.

3、執(zhí)行b2 --link=shared,請(qǐng)注意加入--link=shared,因?yàn)閝pid-cpp的默認(rèn)引入的是動(dòng)態(tài)庫(kù),而不是靜態(tài)庫(kù)。

4、注意點(diǎn):這里不使用boost 1.58.0,因?yàn)槲业臋C(jī)器上同時(shí)裝有vs2008,還有vs2017,死活都使用vs2008。

五、編譯qpid-cpp項(xiàng)目

1、再次打開(kāi)cmake-gui,輸入source path 和build path。我的源碼路徑在E:/qpid/qpid-cpp-1.38.0,build路徑也在該目錄下。點(diǎn)擊"Configure"按鈕,暫時(shí)通不過(guò)。

2、敲黑板,畫(huà)重點(diǎn)了。進(jìn)入上面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、見(jiàn)下圖,不需要的配置就取消。一定要記住,將下圖中高亮部分也取消了。

4、再次點(diǎn)擊"Configure"按鈕,等配置完成后,再點(diǎn)擊"Generate"按鈕,就可以生成目標(biāo)工程文件。

5、使用vs2017打開(kāi)E:\qpid\qpid-cpp-1.38.0\build目錄下的qpid-cpp.sln解決方案。

6、敲黑板,畫(huà)重點(diǎn)了。打開(kāi)qpidcomm工程,找到源碼Logger.cpp,定位到第48行。

原來(lái)有一行代碼:sys::PODMutex loggerLock = QPID_MUTEX_INITIALIZER;

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

這個(gè)靜態(tài)賦值在boost_1_68_0中不合法。

7、參照之前的步驟,點(diǎn)擊Configure和Generate按鈕。然后使用vs2017打開(kāi)qpid-cpp.sln,編譯ALL_BUILD項(xiàng)目。

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

六、編后語(yǔ)

開(kāi)源項(xiàng)目的編譯是個(gè)很繁瑣的事情,即使如qpid這個(gè)項(xiàng)目,是apache的頂級(jí)項(xiàng)目,也是如此。究其原因,我猜測(cè)是windows系統(tǒng)的天然鄙視。話說(shuō)回來(lái),我還是傾向于在windows下寫(xiě)代碼和調(diào)試,在linux下運(yùn)行,便利和性能兼得。如果有什么問(wèn)題,可以聯(lián)系我。費(fèi)了很大的勁才搞定。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容