最近公司在做全景拼接的项目,需要编译Hugin工程,Hugin一个比较强大的开源图像拼接软件,最早在2009年左右就开始发布了,不过感谢作者的开源精神,其直到现在还在持续更新中(详戳 http://hugin.sourceforge.net/)。公司一直使用vs2015进行软件开发,,官方文档最新的教程是基于vs2013,因此不得不自己动手编译。之前本人在编译方面是个新手,编译Hugin初期走了很多弯路,踩过很多坑,甚至一度想放弃,好在自己坚持了下来,为了避免其他人走我的老路,详细介绍一下编译这个工程需要注意的地方。
参考文档为:https://blog.csdn.net/qq_33552519/article/details/103809917, 这篇文档写的很好,步骤很清晰,作者对我编译过程中提供了很多帮助,很长感谢作者。
编译流程和上面的文档里写的大致是一致的,但有一些不同,我主要记录了不同的地方:
1. wxWidgets -3.1.3 ,有尝试wxWidgets -3.1.2,但最后编译会有一些链接错误,可以是某些版本的问题,推荐最新版。
2. 编译Hugin时如果wxWidgets_ROOT_DIR 没有显示出来,最好手动添加路径,如果wxWidgets_ROOT_DIR 为空,系统默认下面这个地址,其中SOURCE_BASE_DIR是Hugin的地址,如果在编译的时候出现找不到 wx/xxx.h的错误就是这个原因了,当然你可以手动把 wxWidgets -3.1.3的include路径加进去。
SET(wxWidgets_ROOT_DIR ${SOURCE_BASE_DIR}/wxWidgets-${wxWidgets_ROOT_SUFFIX})
3. 编译Hugin时最好把HUGIN_SHARED设置为1 (重要),如果使用默认HUGIN_SHARED = 0,在cmake配置hugin的时候,zlib,png,tiff,zib,expat会使用wx版本, 本人在这折腾了大量时间仍然编译不过,强烈推荐大家使用自己编译的版本。
4. 生成Hugin会报错(下图所示):找不到wxTreeItemAttr 的定义,这个问题困扰了大半天的时间,各种google没有结果,经过别人的知道得知应该是版本兼容导致的。具体原因是 wxTreeItemAttr 继承于"wx/itemattr.h"文件的wxItemAttr这个类,我们需要在treelistctrl.cpp 添加#include<wx/itemattr.h>, 并让 wxTreeItemAttr 共有继承 wxItemAttr 即可,如最后一个图所示,再次编译通过了,最后祝大家都可以顺利编译通过。