OpenVINO开发小组
直播中

张浩

8年用户 1205经验值
私信 关注
[问答]

在Ubuntu16.04上从版本2020.1 OpenVINO™升级到2021.4.2之后不兼容怎么解决?


  • OpenVINO™ 2020.1 成功构建自定义库。
  • 升级至 OpenVINO™ 2021.4.2,并重新构建自定义库。
  • 加载自定义库时收到错误:
/src/.build.linux/package/./lib/libvinonodes.so: undefined symbol: _ZNK6ngraph4Node8evaluateERKSt6vectorISt10shared_ptrINS_7runtime10HostTensorEESaIS5_EES9_RKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES2_INS_7VariantEESt4lessISG_ESaISt4pairIKSG_SI_EEE

回帖(1)

肖耳朵

2025-3-5 17:52:56

在从 OpenVINO™ 2020.1 升级到 2021.4.2 后遇到兼容性问题,特别是在加载自定义库时出现 undefined symbol 错误,这通常是由于 OpenVINO™ 的 API 或 ABI 在版本之间发生了变化,导致旧版的自定义库无法与新版 OpenVINO™ 兼容。以下是一些可能的解决方法:


1. 重新编译自定义库



  • 由于 OpenVINO™ 2021.4.2 可能与 2020.1 的 API 或 ABI 不兼容,建议使用 2021.4.2 的 OpenVINO™ 工具包重新编译自定义库。

  • 确保在编译时使用正确的头文件和库路径,并链接到 2021.4.2 版本的 OpenVINO™ 库。


2. 检查依赖项



  • 确保所有依赖项(如 ngraph 等)与 OpenVINO™ 2021.4.2 兼容。OpenVINO™ 2021.4.2 可能使用了不同版本的 ngraph 或其他库,导致符号未定义。

  • 可以使用 ldd 命令检查自定义库的依赖项,确保它们与 OpenVINO™ 2021.4.2 的依赖项一致。


3. 使用兼容性层



  • 如果无法立即重新编译自定义库,可以尝试使用 OpenVINO™ 提供的兼容性层或回退到旧版本的 OpenVINO™,直到自定义库能够更新。


4. 检查 API 变化



  • 查阅 OpenVINO™ 2021.4.2 的发布说明和 API 文档,查看是否有重大变化或弃用的 API。

  • 如果 ngraph::Node::evaluate 的签名或行为发生了变化,可能需要相应地修改自定义库的代码。


5. 使用符号表工具



  • 使用 nmobjdump 工具检查 libvinonodes.so 和 OpenVINO™ 2021.4.2 的库,确认符号是否匹配。

  • 例如:
     nm -D /path/to/libvinonodes.so | grep _ZNK6ngraph4Node8evaluate
    nm -D /path/to/libopenvino.so | grep _ZNK6ngraph4Node8evaluate

  • 如果符号不匹配,可能需要重新编译或调整代码。


6. 清理和重新构建



  • 确保在重新构建自定义库之前,清理旧的构建产物(如 make clean 或删除 build 目录),以避免残留的旧版本文件导致问题。


7. 联系 OpenVINO™ 社区



  • 如果问题仍然无法解决,可以访问 OpenVINO™ 的官方论坛或 GitHub 仓库,向社区寻求帮助。提供详细的错误信息和环境信息,以便更好地诊断问题。


8. 降级 OpenVINO™



  • 如果时间紧迫,无法立即解决兼容性问题,可以考虑暂时降级回 OpenVINO™ 2020.1,直到有足够的时间更新自定义库。


9. 使用 Docker 或虚拟环境



  • 为了避免影响现有环境,可以在 Docker 容器或虚拟环境中安装 OpenVINO™ 2021.4.2,并在其中测试和构建自定义库。


通过以上步骤,应该能够解决 OpenVINO™ 2021.4.2 与自定义库之间的兼容性问题。如果问题仍然存在,建议进一步分析错误日志和符号表,以确定具体的原因。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分