前言

  • 本章讲述实现本项目实现过程中遇到的QGis二次开发库版本和Qt以及其他动态库的版本匹配问题

问题复现

  • 本项目是要作为一个子模块集成到用户的项目中
  • 本项目最初的开发环境为QGis3.28+Qt5.15.2,而当时并未问清楚用户开发环境
  • 所以交付给用户之后,出现了类似下图的问题
    在这里插入图片描述
  • 出现该问题后才知道用户的Qt版本为Qt5.9.6

"无法定位程序输入点"原因

you don’t have multiple versions of ludocore.dll on your system, do you? Procedure entry points errors usually mean: you compiled your project against ludocore.lib version x, and when running the program, it uses ludocore.dll version y, and version y does not define LudoMemory::Destroy().

  • 翻译如下

你编译你的项目时使用了版本为x的ludocore.lib库,但是当运行程序时,它使用了版本为y的ludocore.dll库,而版本y并未定义LudoMemory::Destroy()函数。

  • 具体到我们的项目上,由于开发环境是Qt5.15.2,而用户环境是Qt5.9.6,所以是dll版本问题导致了这个问题

问题解决

  • 两个方法:
  1. 用户的Qt版本升级为5.15.2
  2. QGis的版本降级,降级到使用Qt5.9版本编译的QGis
  • 由于用户的Qt版本不能修改,所以只能采用方法1了

  • QGis降级过程

    • QGis3.34对应Qt5.15.13
      在这里插入图片描述
    • QGis3.28对应Qt5.15.3
      在这里插入图片描述
    • QGis3.16对应Qt5.11.2
      在这里插入图片描述
    • QGis3.0.3对应Qt5.9.2
      在这里插入图片描述
  • 最终使用QGis3.0.3和用户的环境匹配上了

总结

  • 需求挖掘阶段要问清楚用户对QGis版本的要求,如果用户要求Qt5.9.6+QGis3.28,那么就无法实现了
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐