activemq-cpp-library在VS2015下的編譯

http://activemq.apache.org/cms/download.html下載最新版本的activemq-cpp,解壓後,可以看到有一個vs2010-build文件夾,打開裏面的activemq-cpp.sln。

閱讀README.txt文檔,根據提示,下載依賴庫

  1. APR:http://apr.apache.org/
  2. CPPUnit:http://cppunit.sourceforge.net/cppunit-wiki/BuildingCppUnit1
  3. 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,以下所有編譯均一樣。

  1. 編譯apr,在apr\Debug目錄下會生成兩個文件libapr-1.lib和libapr-1.dll
  2. 編譯apr-iconv,添加依賴項libapr-1.lib以及相應的頭文件路徑和依賴項路徑,在apr-iconv\Debug目錄下會生成兩個文件libapriconv-1.lib和libapriconv-1.dll
  3. 編譯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文件),編譯過程中可能會出現“無法解析的外部符號問題”
error
缺少ws2_32.lib文件,添加該依賴項,這是由於代碼中使用到了網絡相關的API,該文件用於提供API接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章