You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:21:34