windows下如何编译带SSL/TLS的wsdl2h

本文详述了在Windows环境下使用gSOAP编译工具,结合openssl库支持HTTPS下载WSDL文件的过程。从openssl安装到预处理器宏设置,再到解决编译问题,包括头文件路径配置、库文件链接及typemap.dat文件调整,直至wsdl2h和soapcpp2工具的正确使用,提供了一套完整的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gSOAP官方提供的、已编译好的wsdl2h默认是禁用SSL/TLS的,所以不支持HTTPS下载WSDL文件。但就windows下如何编译在网上没找到具体案例。自己摸索,总结下来有四个步骤。

1、安装openssl,可以选择安装包安装(http://slproweb.com/products/Win32OpenSSL.html

2、在vs的项目右键属性,选择C/C++,选中预处理器,加入宏WITH_OPENSSL(启用openssl)

接下来就是解决编译问题

   2.1、添加头文件包含目录,一二条是gsoap中头文件路径,第三条是openssl的头文件路径

   

   2.2、链接器的输入中加入libcrypto.lib和libssl.lib

   

   2.3、最后添加一下openssl的lib库目录

   

只要包含这些应该就可以生成wsdl2h。

3、生成wsdl2h后,准备生成onvif.h。输入wsdl2h -P -x -c -s -t ./typemap.dat -o onvif.h https://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdl https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl

这里我第一次生成时报错,An error occurred while parsing schema from 'https://www.onvif.org/ver10/schema/onvif.xsd'(后续测试也报过其他xsd的错误)

参考https://www.genivia.com/resources.html#How_do_I_use_gSOAP_with_the_ONVIF_specifications?,修改你的typemap.dat。黑框框里的东西,缺什么就往typemap.dat里加什么。

当出现这样的结果就正确了。

4、最后利用soapcpp2生成所需文件

soapcpp2 -2 -C -L -c -x -IC:\Users\wang\Desktop\gsoap_2.8.102\gsoap-2.8\gsoap\import\ -d ./ onvif.h

 

本文主体步骤参考大佬的文章https://blog.csdn.net/benkaoya/article/details/72466827

生成后的文件在此处https://download.csdn.net/download/baidu_28572705/12399273

 

后续:

编译时将生成的几个文件载入项目就好

我在编译时还遇到了两个错误:

(1)、soapStub.h的32行出错我就注释了

(2)、gsoap duration.c报错

在typemap.dat中加入xsd__duration = #import "custom/duration.h" | xsd__duration再重新走一遍步骤3

这一步可参考https://blog.csdn.net/wxliang1023/article/details/83788731

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值