m0_61770108 2024-04-14 16:57 采纳率: 12.2%
浏览 110
已结题

onvif框架引用一直报错

gsoap生成onvif未报错,在VS中C++项目,以及QT中引用onvif框架内容,一直报错

img

img

img

  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-14 16:57
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    针对您遇到的ONVIF框架引用在C++项目(包括VS与QT)中报错的问题,结合您提供的图1、图2和图3中的信息,可以确定主要存在以下两个问题:

    问题一:GSOAP版本不匹配

    错误提示:

    C1189 #error: "GSOAP VERSION MISMATCH IN LIBRARY: PLEASE REINSTALL PACKAGE"
    

    解决办法:

    1. 重新安装GSOAP库: 根据错误提示,您需要重新安装GSOAP库以确保其版本与您生成的ONVIF代码兼容。请卸载当前已安装的GSOAP版本,然后从官方渠道下载与您的项目生成代码对应的GSOAP版本进行安装。

    2. 检查项目配置: 确保在您的VS和QT项目中,链接器设置正确指向新安装的GSOAP库路径。对于VS项目,您可以在项目属性(Properties) → 链接器(Linker) → 附加库目录(Additional Library Directories)中添加GSOAP库路径。对于QT项目,在.pro文件中添加类似如下一行:

      LIBS += -L"path/to/gsoap/libs" -l<required_gsoap_libs>
      

    问题二:未定义标识符及函数引用错误

    错误提示:

    E0020 未定义标识符"SOAP_MAXALLOCSIZE"
    ...
    E0035 #error 指令: "GSOAP VERSION MISMATCH IN LIBRARY: PLEASE REINSTALL PACKAGE"
    ...
    E0079 应输入类型说明符
    ...
    undefined reference to 'EVP_PKEY_free'
    ...
    

    解决办法:

    1. 修正代码错误: 对于如E0079等编译器指出的代码错误,如类型说明符缺失、逻辑操作符误用等,直接按照编译器提示修改对应源代码行。

    2. 链接缺失的库: 对于undefined reference to ...这类链接错误,表示编译器找不到相应的函数实现。这通常意味着您还需要链接其他依赖库,如OpenSSL(在您的错误信息中涉及EVP_PKEY_free等OpenSSL函数)。请确保在项目配置中正确链接OpenSSL库。对于VS项目,在链接器(Linker) → 输入(Input) → 附加依赖项(Additional Dependencies)中添加libeay32.libssleay32.lib(或相应版本的库文件名)。对于QT项目,在.pro文件中添加:

      LIBS += -lssl -lcrypto
      
    3. 更新项目包含路径: 确保所有必要的头文件路径已添加到项目包含路径中。对于VS项目,在项目属性(Properties) → C/C++(General) → 附加包含目录(Additional Include Directories)中添加GSOAP头文件所在的路径。对于QT项目,在.pro文件中添加:

      INCLUDEPATH += "path/to/gsoap/headers"
      

    总结:

    为解决上述问题,请按照以下步骤操作:

    1. 卸载现有GSOAP库,安装与项目生成代码兼容的GSOAP版本。
    2. 更新VS和QT项目配置,确保链接器指向正确的GSOAP库路径,并链接所需的依赖库(如OpenSSL)。
    3. 确保项目包含路径包含所有必要的GSOAP头文件路径。
    4. 根据编译器提示修正源代码中的错误。

    完成上述步骤后,重新编译您的项目,应该能解决ONVIF框架引用报错问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 创建了问题 4月14日