linux 下gsoap编译Onvif, gsoap “undefined reference to `namespaces‘“

1.安装gsoap

sudo apt install gsoap libgsoap-dev

2.下载(onvif官网下载)

wsdlonvif编译流程-互联网文档类资源-CSDN下载

3.生成onvif.h

编辑typedef.dat, 去掉改行注释:

xsd__duration = #import "custom/duration.h" | xsd__duration

wsdl2h -o onvif.h -t /usr/share/gsoap/WS/typemap.dat ./wsdl/accesscontrol.wsdl ./wsdl/accessrules.wsdl ./wsdl/actionengine.wsdl ./wsdl/advancedsecurity.wsdl ./wsdl/analytics.wsdl ./wsdl/analyticsdevice.wsdl ./wsdl/appmgmt.wsdl ./wsdl/authenticationbehavior.wsdl ./wsdl/bw-2-vs-mod.wsdl ./wsdl/credential.wsdl ./wsdl/deviceio.wsdl ./wsdl/devicemgmt.wsdl ./wsdl/display.wsdl ./wsdl/display2.wsdl ./wsdl/doorcontrol.wsdl ./wsdl/event.wsdl ./wsdl/event-vs.wsdl ./wsdl/federatedsearch.wsdl ./wsdl/imaging.wsdl ./wsdl/media.wsdl ./wsdl/media2.wsdl ./wsdl/provisioning.wsdl ./wsdl/ptz.wsdl ./wsdl/receiver.wsdl ./wsdl/recording.wsdl ./wsdl/replay.wsdl ./wsdl/schedule.wsdl ./wsdl/search.wsdl ./wsdl/security.wsdl ./wsdl/thermal.wsdl ./wsdl/uplink.wsdl ./wsdl/remotediscovery.wsdl

4.onvif.h添加引用

add #import "wsse.h" in the onvif.h

5.修改wsa5.h

修改/usr/share/gsoap/import/wsa5.h文件,将int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex

6.生成cpp和h

mkdir onvif (创建文件夹)

soapcpp2 -2 -L -x -i -I/usr/share/gsoap -I/usr/share/gsoap/import -I/usr/share/gsoap/custom -d./onvif onvif.h

7.gsoap "undefined reference to `namespaces'"

需要增加namespace.cpp,内容为 #include "DeviceBinding.nsmap"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gSOAP是一个C/C++的SOAP (Simple Object Access Protocol)开发工具箱,可以用来实现Web Services以及SOAP消息的编解码。通过使用gSOAP,可以方便快捷地实现ONVIF服务。 以下是实现ONVIF服务的步骤: 1. 下载和安装gSOAP工具箱。 2. 生成服务端代码。使用gSOAP提供的命令行工具wsdl2h,将ONVIF的WSDL文件转换为gSOAP的头文件。例如: ``` wsdl2h -o onvif.h http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl ``` 3. 生成客户端代码。使用gSOAP提供的命令行工具soapcpp2,将ONVIF的WSDL文件转换为gSOAP的客户端代码。例如: ``` soapcpp2 -i -C onvif.h ``` 4. 实现服务端程序。在服务端程序中,需要实现ONVIF的各个接口函数,并使用gSOAP提供的API进行SOAP消息的编解码和发送。例如: ```c++ #include "soapH.h" #include "onvif.nsmap" int main(int argc, char** argv) { struct soap soap; soap_init(&soap); // 实现ONVIF的各个接口函数 soap_serve(&soap); soap_destroy(&soap); soap_end(&soap); soap_done(&soap); return 0; } ``` 5. 实现客户端程序。在客户端程序中,需要使用gSOAP提供的API进行SOAP消息的编解码和发送,并调用ONVIF的各个接口函数。例如: ```c++ #include "soapH.h" #include "onvif.nsmap" int main(int argc, char** argv) { struct soap soap; soap_init(&soap); // 调用ONVIF的各个接口函数 soap_destroy(&soap); soap_end(&soap); soap_done(&soap); return 0; } ``` 6. 编译和运行程序。使用gSOAP提供的命令行工具soapcpp2,将生成的客户端和服务端代码编译成可执行程序。例如: ``` soapcpp2 -i -C onvif.h gcc -o onvif_server onvif_server.cpp onvif_serverC.cpp soapC.cpp stdsoap2.cpp gcc -o onvif_client onvif_client.cpp onvif_clientC.cpp soapC.cpp stdsoap2.cpp ``` 7. 测试程序。运行服务端程序,并使用客户端程序调用ONVIF的各个接口函数进行测试。例如: ``` ./onvif_server & ./onvif_client ``` 以上就是使用gSOAP实现ONVIF服务的基本步骤。需要注意的是,gSOAP提供了丰富的API和工具,可以根据具体的需求进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值