使用C++编译带WS-Security的Gsoap 2.8.123失败求助
ONVIF WS-Security编译错误:无法识别wsse__Security结构体
问题场景
我需要使用ONVIF高级安全WSDL中的消息,通过命令行执行wsdl2h和soapcpp2生成CPP文件并加入项目,按WS-Security相关说明编译时失败:wsseapi.cpp中出现657个错误,核心原因是无法识别soap结构体中的wsse__Security。禁用SSL后项目可正常编译,但我需要启用基于WS-Security的SSL,求gSOAP相关配置方案。
解决方法
生成头文件时引入WS-Security定义
运行wsdl2h时必须确保导入WS-Security的标准定义,命令示例:wsdl2h -c++ -w -o advancedsecurity.h http://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl注意:确保gSOAP安装目录的
import文件夹下存在wsse.h等WS-Security相关文件,生成头文件时会自动引用这些定义,否则wsse__Security结构体不会被生成。生成CPP文件时启用WS-Security宏
执行soapcpp2时必须添加-DWITH_WSSE宏,开启WS-Security支持,命令示例:soapcpp2 -c++ -DWITH_WSSE advancedsecurity.h该宏会让gSOAP生成包含
wsse__Security等WS-Security结构体的代码,缺失此宏会导致wsseapi.cpp找不到相关定义。项目编译配置调整
在项目编译选项中添加:-DWITH_WSSE:启用WS-Security支持-DWITH_OPENSSL:启用SSL加密
同时链接OpenSSL库(libssl、libcrypto)和gSOAP的SSL/WS-Security库(如libgsoapssl++)。
确保文件版本匹配
不要手动修改自动生成的wsseapi.cpp,确保该文件是当前gSOAP版本生成的,版本不匹配会导致结构体定义不兼容。
内容的提问来源于stack exchange,提问作者Massimo
相关产品推荐
相关产品推荐

