1. 程式人生 > >關於帶名稱空間的gsoap工程編譯

關於帶名稱空間的gsoap工程編譯

有的時候,我們需要把gsoap工程帶上名稱空間,如採取如下的編譯選項:

soapcpp2 -n -qivs_vms_mcuUsrMgr -x -L ivs_vms_mcu_usrmgr.h

因為帶了名稱空間,所以生成的 *Stub.h *H.h,和*C.cpp帶有特別性,導致很多預設生成的特性沒有了,此時可以用一個空的標頭檔案生成另外的通用*Stub,*H.h和*C.cpp,然後在生成客戶和服務程式時連線額外的*C.o(目標檔案)就可以了。

另外就是在這種情況下,需要為stdsoap2.cpp指定WITH_NONAMESPACES編譯選項,方法是 -DWITH_NONAMESPACES。

採用如下編譯選項時:soapcpp2 -n -qivs_vms_mcuUsrMgr -x -L ivs_vms_mcu_usrmgr.h,客戶端和服務端的連線情況如下:

SERVEROBJS = usrserver.o shdv_pq_interface.o usrinfointerface.o ivs_vms_mcuUsrMgrC.o ivs_vms_mcuUsrMgrServer.o stdsoap2.o ivs_vms_gsoap_commonC.o
CLIENTOBJS = usrclient.o ivs_vms_mcuUsrMgrC.o ivs_vms_mcuUsrMgrClient.o stdsoap2.o ivs_vms_gsoap_commonC.o

經過試驗:除了在編譯stdsoap2.cpp時指定DWITH_NONAMESPACES,上述所有步驟均可不採用。