ActiveMQ-cpp編譯及可能的錯誤處理

ActiveMQ-cpp的編譯相當麻煩,網上也可以找到不少指定資料,可照着做有錯誤不知道怎麼辦,後來重要找到了一篇處理的錯誤的文章,自己也編譯成功,主要的兩篇參照文章會在文章最後給出。下面整理下,希望後來人不用再浪費時間

需要下載的東西(版本最新的就行):
1、ActiveMQ-CPP: http://activemq.apache.org/cms/
2、cppunit: http://sourceforge.net/apps/mediawiki/cppunit/index.php?title=Main_Page
3、apr(apr, apr-util, apr-iconv 三個都要下載): http://apr.apache.org/download.cgi?Preferred=http%3A%2F%2Fapache.etoak.com
有下載不了的請百度、或google
 
下載到同一目錄{dir},逐個解壓到當前目錄,然後重命名去掉目錄名字的版本號,最後是下面4個文件夾:
{dir}\cppunit
{dir}\apr\
{dir}\apr-iconv\
{dir}\apr-util\
如果路徑不這樣,後面會需要修改頭文件包含目錄,比較麻煩...
 
1、編譯cppunit
用vc6打開打開examples.dsw,指編譯cppunit和cppunit_dll
 
2、編譯libapr、libapriconv、libaprutil
用vc6打開{dir}\apr-util\aprutil.dsw,會提示讓你指定路徑去打開多個項目,如果上述路徑正確,需要指定的就比較少,但不管多與少那些項目一定在:
{dir}\apr
{dir}\apr\build
{dir}\apr-iconv
{dir}\apr-iconv\build
全部打開後,我們需要的依次編譯下面的工程:
//  如果出現錯誤請看下面第4節編譯錯誤的處理  
apr
apriconv
aprutil
libapr
libapriconv
libaprutil
 
補充(2013-02-27):前三個爲靜態庫,後三個爲動態庫,不論需要哪種,把這六個的debug和release版本都編譯出來,不然可能缺少自動生成的頭文件,編譯完成後,在apr、apr-iconv、apr-util的目錄下會有這樣幾個目錄:
Debug(debug動態庫)
Release(release動態庫)
LibD(debug靜態庫)
LibR(release靜態庫)
 
3、編譯ActiveMQ-CPP
 
補充(2013-02-27):建議使用apr、apr-iconv、apr-util的動態庫,原因下面會講。
補充(2013-02-27):建議編譯時,debug版的activemq使用debug版的apr動態庫,release版的activemq使用release版的動態庫,所以後文的lib目錄應該分爲debugDLL和releaseDLL兩個目錄,用來編譯兩個版本的activemq。
 
將1、2編譯出來的文件拷貝到{dir}\lib(方便管理):
cppunit.lib
cppunit_dll.lib
libapr-1.lib
libapriconv-1.lib
libaprutil-1.lib
 
cppunit_dll.dll
libapr-1.dll
libapriconv-1.dll
libaprutil-1.dll
//可能不需要這麼多,我沒測試,成功就行
 
最新的activemq-cpp是vc2008編譯的,這裏用的是vc2010,打開{dir}\activemq-cpp-library-3.4.0\vs2008-build\activemq-cpp.sln
補充(2013-02-27):無論編譯還是以後使用都建議用vc2008,否則編譯ReleaseDLL和使用Relase版都可能出問題。
也是有多個項目,我們只需要編譯activemq-cpp就可以,編譯前添加頭文件搜索目錄:
{dir}\cppunit\include
{dir}\arp\include
{dir}\apr-iconv\include
{dir}\apr-util\include
添加庫搜索目錄:
{dir}\lib
補充(2013-02-27):debug版的activemq添加{dir}\debugDLL,release添加{dir}\releaseDLL
 
編譯activemq-cpp,會生成靜態庫:libactivemq-cppd.lib
可以選擇編譯成動態庫,不過編譯沒通過,暫時還不知道原因
補充(2013-02-27):不建議用靜態庫,非常大,200多M和500多M,使用時每次編譯程序都比較慢,而且在我測試時,就算使用靜態庫,還是需要apr的動態庫libapr(很奇怪,應該是我哪裏錯了),沒辦法做到完全沒有DLL。實際使用中我編譯了ReleaseDLL和DebugDLL,在自己的程序中debug使用DebugDLL,release使用ReleaseDLL。
使用中只需要下面的幾個文件:
activemq-cpp.lib(debug版爲activemq-cppd.lib,只需要編譯這一個lib即可)
activemq-cpp.dll(debug版爲activemq-cpp.dll)
libapr-1.dll
libapriconv-1.dll
libaprutil-1.dll
 
編譯完成後可以編譯此方案中的activemq-cpp-example,測試下activemq-cpp,記得要加入頭文件目錄、庫目錄,如果運行時沒有找到DLL,還需要把依賴的DLL複製到運行目錄
 
4、第2節編譯錯誤處理
可能出現的錯誤及處理:
 
1)沒有找到strings.h和inet.h 錯誤:
打開httpd-2.2.11\srclib\apr\include\apr_want.h 文件,把以下行註釋掉:
#if APR_HAVE_STRINGS_H
#include <strings.h>
#endif
#if APR_HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
 
2)提示不支持LDAP v2.0錯誤:
打開httpd-2.2.11\srclib\apr-util\include\apr_ldap.h ,註釋此行:
#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.
 
3)未定義SQLLEN或者SQLULEN
打開文件:httpd-2.2.11\srclib\apr-util\dbd\apr_dbd_odbc.c
文件頭部定義:
typedef INT32 SQLLEN
typedef unsigned int SQLULEN
//雙擊定位到錯誤,在上面定義也可以,方便
 
4)LDAP_VENDOR_NAME 錯誤
打開httpd-2.2.11\srclib\apr-util\ldap\apr_ldap_init.c,註釋掉它:
LDAP_VENDOR_NAME
 
5)WtsApi32.h沒有包含錯誤
表示沒有安裝或配置Microsoft 的PlatformSDK,需要去微軟網站上下載PlatformSDK,並安裝。
 
6)awk 錯誤
這個錯誤是由於沒有安裝awk工具導致,可以先到http://www.gnu.org/software/gawk/ 下載一個gawk進行安裝。如果安裝的目錄爲:C:\Program Files\GnuWin32,在該目錄下可以看到一個bin目錄,需要把該目錄添加到VC Executable files。完整路徑可能爲:C:\Program Files\GnuWin32\bin
 
主要參考鏈接:
 

 

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