從http://activemq.apache.org/cms/download.html下載最新版本的activemq-cpp,解壓後,可以看到有一個vs2010-build文件夾,打開裏面的activemq-cpp.sln。
閱讀README.txt文檔,根據提示,下載依賴庫
- APR:http://apr.apache.org/
- CPPUnit:http://cppunit.sourceforge.net/cppunit-wiki/BuildingCppUnit1
- OpenSSL及其他:根據需要可選擇不下載,但以上兩個一定需要
在對activemq-cpp-library進行編譯前,首先要確保依賴庫的正常編譯,查閱網上諸多資料,有分開逐個編譯好再通過activemq-cpp-library的工程編譯的,也有一次性全部一起編譯的,本人嘗試過一次性編譯,未成功且錯誤較多不好判斷哪個項目編譯有問題,所以,本次展示的是分開編譯的過程。
APR編譯
APR庫需要用到三個:apr、apr-iconv、apr-util,下載解壓後把文件夾的版本號去掉。
由於後面兩個需要依賴apr的生成,所以,首先需要編譯的是apr這個項目,爲了避免開太多窗口,我把所有的項目工程都加進去剛剛打開的activemq-cpp.sln中。
文件-》添加-》現有項目 選擇{$your_apr_location}目錄下的libapr.vcproj,libapriconv.vcproj,libaprutil.vcproj
接下來正式開始編譯,本人編譯的是Debug版本Win32,以下所有編譯均一樣。
- 編譯apr,在apr\Debug目錄下會生成兩個文件libapr-1.lib和libapr-1.dll
- 編譯apr-iconv,添加依賴項libapr-1.lib以及相應的頭文件路徑和依賴項路徑,在apr-iconv\Debug目錄下會生成兩個文件libapriconv-1.lib和libapriconv-1.dll
- 編譯apr-until,添加依賴項libapr-1.lib,libapriconv-1.lib,libexpat.lib(XML解析器)以及相應的頭文件路徑和依賴項路徑生成libaprutil-1.lib和libapruril-1.dll
libexpat.lib這個庫文件原來並沒有包含進去,所以會有報錯提醒,它存在於{$your_location}\apr-util\xml\expat\lib下。
至此,APR部分編譯完成,一共生成六個文件:libapr-1.lib,libapr-1.dll,libapriconv-1.lib,libapriconv-1.dll,libaprutil-1.lib,libaprutil-1.dll
CPPUnit編譯
添加項目{$your_location}\cppunit\src\CppUnitLibraries.dsw
至此,解決方案中會出現13個項目:
除了cppunit需要編譯外,其他可以先不管
編譯cppunit,會生成cppunit.lib、cppunit_dll.dll、cppunit_dll.lib、cppunitd.lib四個文件。
錯誤問題:
出現copy錯誤,要通過屬性頁設置目標文件名$(ProjectName)-》 $(ProjectName)d
至此activemq-cpp-library的依賴庫文件已全部生成,爲方便起見,把前面所有的庫文件全部打包一起放到activemq-cpp-library的lib目錄下統一管理。(關於這一點,也可以根據文檔中所述的,通過修改依賴庫文件的目錄結構爲統一的格式,並設置好環境變量,如下圖)
Activemq-cpp-library編譯
首先需要編譯的是activemq-cpp這個項目,編譯前工作:把頭文件目錄以及附加庫目錄設置好,在屬性-》C/C++-》調試信息格式,設置爲:程序數據庫 (/Zi),否則會出現錯誤 D8016“/ZI”和“/Gy-”命令行選項不兼容。
去掉警告
輸出文件名與目標文件名不一致,把輸出文件名改成libactivemq-cppd.lib
編譯成功,在目錄{your_activemq-cpp-library_location}\activemq-cpp-library-3.9.3\vs2010-build\Win32\Debug下生成libactivemq-cppd.lib文件。
編譯activemq-cpp-example項目,同理,添加頭文件和庫文件目錄,生成activemq-cpp-example.exe程序,運行這個文件必須要和前面的那些lib文件放在同一級目錄下,這是官網提供的一個activemq客戶端實例,它實現的是生產者生成了2000個消息,消費者進行消費這2000個消息,生成topic消息,在http://localhost:8161/admin/topics.jsp可以看到。
另外,單獨編譯consumer和producer項目時,添加頭文件和庫文件目錄,以及附加的依賴項(各lib文件),編譯過程中可能會出現“無法解析的外部符號問題”
缺少ws2_32.lib文件,添加該依賴項,這是由於代碼中使用到了網絡相關的API,該文件用於提供API接口。