编译hugin

hugin的编译其实有点复杂,因为涉及的包太多了,而且网上也没有靠谱的说明,我能找到的材料主要是
Hugin编译说明        http://wiki.panotools.org/Hugin_Compiling_Windows_with_SDK
SDK说明              http://wiki.panotools.org/Hugin_SDK_(MSVC_2008)
前者是编译Hugin的说明,后者是编译需要的各种开源库的SDK编译说明,要按照第二个网址的内容编译好所有需要的开源库,形成SDK然后再编译Hugin。

本文主要按照以上两个网址的说明进行编译,并对其中不准确的地方进行补充。

1.开发环境的准备

1.1 必备软件

  • VS2008  这个自不必说,如果手上没有或者有正版情结的话可以下载 Visual C++ 2008 Express                Edition:             下载页 
  • CMake:                       下载页    下载最新版就好
  • TortoiseSVN:                 下载页    也是下载最新版就好,不过可能不会用到
  • TortoiseHg:                  下载页    同上
  • 7-Zip:                       下载页    如果有其他解压工具的话这个可以忽略
  • Java SE Development Kit :    下载页    同样下载最新版JDK就好
  • Microsoft HTML Help Workshop:下载页    HTML帮助编译器
  • NSIS                          下载页    安装程序生成器


1.2  必要的库
按照说明,32位的编译可以从 http://hugin.panotools.org/sdk/MSVC/Hugin-SDK-20090509-win32.exe 下载预编译的SDK,但是下载到的SDK极端不完整,需要按照SDK的编译说明进行补足。
预编译包中已有的文件夹:
  
autopano-sift-C
boost_1_39_0
Deploy
exiftool
exiv2-0.18.1
expat-2.0.1
gettext
glew
hugin-2012.0.0
libpano
libxml2-2.7.3
OpenEXR
UnxUtils
wxWidgets-2.8.10

将下载下的SDK自解压解压到随便什么文件夹,在下文中此文件夹用指代

需要添加的库:

lcms-1.18a           http://www.littlecms.com
                    或直接
                     lcms-1.18a.zip
freeglut-2.6.0       http://freeglut.sourceforge.net/index.php   或直接
                     freeglut-2.6.0.tar.gz

enblend-enfuse-3.2   enblend-enfuse-3.2.zip
boost_1_43_0         boost_1_43_0.7z   因为SDK包中带的1_39_0在后面会因为版本过低不能用,所以要                         加个比较新的版本,老的可以删掉
boost-jam            boost-jam-3.1.18-1-ntx86.zip  boost的编译器,编译boost的时候要用
wxWidgets- 2.9.4       wxWidgets-2.9.4.zip  同样是版本过低要用新版本替换
Panorama Tools       libpano13-2.9.18.tar.gz  替换掉低版本
TCLAP                tclap-1.2.0.tar.gz
GLIB                需要下载 glib_2.28.8-1_win32.zip和 glib-dev_2.28.8-1_win32.zip
LensFun             这是相机与镜头的数据库,因为厂商在不断发布新相机与镜头,所以建议到 官方下载下                         载最新版
SWIG                 swigwin-2.0.8.zip
make_3.81            http://www.gnu.org/software/make/  或者直接下载 make-3.81.tar.gz

1.3 编译SDK
首先要把上面提到的软件都装上,就不多说了。
在编译每一个单独的包之前,都要确保这些包的解决方案中每一个项目 的属性->c/c++->代码生成->运行时库项是 多线程(/MT)(当编译配置是release时)或 多线程调试(/MTd) (当编译配置是debug时),否则在最终生成hugin时会出错,具体原因参见 http://blog.csdn.net/houwalkman/article/details/4243286

然后开始编译后添加的几个软件包:
  • lcms-1.18a
lcms-1.18a.zip解压到
打开 lcms-1.18ProjectsVC2008lcms.sln
在解决方案配置下拉菜单中选择"release",仅生成lcms
然后在解决方案配置下拉菜单中选择"debug", 仅生成lcms

结果:在 lcms-1.18LibMS中存在生成的库文件

  • freeglut-2.6.0
freeglut-2.6.0.tar.gz解压到
打开 freeglut-2.6.0VisualStudio2008Staticfreeglut.sln
在解决方案配置下拉菜单中选择"release",仅生成 freeglut
然后在解决方案配置下拉菜单中选择"debug", 仅生成 freeglut

结果:在 freeglut-2.6.0VisualStudio2008StaticDebug和 freeglut-    2.6.0VisualStudio2008StaticRelease中存在生成的库文件
  • enblend-enfuse-3.2 
enblend-enfuse-3.2.zip 解压到
    将文件夹中所有没有扩展名的文件加上".txt'的扩展名
    在 enblend-enfuse-3.2中建立文件夹doc,然后随便找两个pdf放进去,分别命名为
    enblend.pdf和enfuse.pdf


结果: enblend-enfuse-3.2存在enblend.exe和enfuse.exe
  • boost_1_43_0    
将boost_1_43_0 解压到
将boost-jam-3.1.18-1-ntx86.zip中的bjam.exe解压到 boost_1_43_0
打开命令提示符,并切换到 boost_1_43_0
例如:
      Microsoft Windows XP [Version 5.1.2600] 
      (C) Copyright 1985-2001 Microsoft Corp. 
                                              
      C:Dokuments and SettingsGuido>d:      
      D:>cd usrsrcSDKboost_1_39_0        
      D:usrsrcSDKboost_1_39_0>            
然后执行命令
bjam --with-date_time --with-thread --with-regex --with-filesystem --with-iostreams --with-system --with-signals toolset=msvc variant=debug variant=release link=static threading=multi runtime-link=static stage 
编译boost视机器配置不同可能需要较长时间,请耐心等待.
之行结束之后会有类似
...updated 56 targets... 
 d:usrsrcSDKboost_1_39_0>
的字样,具体的数字可能不同.
结果: boost_1_43_0和下面的子文件夹boost中存在.h文件
      boost_1_43_0stagelib中存在编译好的lib文件
  • wxWidgets-2.9.4
下建立文件夹 wxWidgets- 2.9.4并将 wxWidgets- 2.9.4的内容解压到此文件夹
wxWidgets- 2.8.10删除
打开VS的命令行模式(开始->程序->Microsoft Visual Studio 2008->Visual Studio Tools->Visual          Studio 命令提示)
在命令行下切换到 wxWidgets-2.9.4buildmsw
例如:
C:Program FilesMicrosoft Visual Studio 9.0VC>d:
D:>cd usrsrcSDKwxWidgets-2.8.10buildmsw    
D:usrsrcSDKwxWidgets-2.8.10buildmsw>        
然后执行下面的命令:
nmake -f makefile.vc BUILD=debug UNICODE=1 SHARED=0 USE_OPENGL=1 RUNTIME_LIBS=static
nmake -f makefile.vc BUILD=release UNICODE=1 SHARED=0 USE_OPENGL=1 RUNTIME_LIBS=static

结果:
wxWidgets-2.9.4include和子目录中存在.h的包括文件
wxWidgets-2.9.4libvc_lib中存在库文件


然后再编译一个小东西,打开wxWidgets-2.9.4utilswxrcwxrc_vc9.vcproj,然后将其编译,会    在vc_mswu中生成wxrc.exe,这个东西先记着,后面会用到.
  • Panorama Tools
libpano下的pano13目录删除,将libpano13-2.9.18.tar.gz解压到此目录并重新命名为pano13

在Windows的系统属性中设置环境变量WXWIDGETS_HOME,并将其赋值为wxWidgets-2.9.4  (注意     要用真实的路径替换)
设置JDK_HOME,赋值为JDK的路径,例如C:ProgramFilesJavajdk1.6.0_13,重新启动使环境变量生效

选择"Debug CMD"并只生成pano13
选择"Release CMD"并生成解决方案

结果:
libpanopano13toolsRelease CMD中存在生成的可执行文件
libpanopano13存在.h文件
libpanopano13Debug CMD和 libpanopano13Release CMD中存在生成的lib文件

  • TCLAP
将tclap-1.2.0.tar.gz解压到

结果:需要的头文件存在于tclap-1.2.0includetclap 
  • GLib
将glib-dev_2.28.8-1_win32.zip解压到,并将文件夹重命名为glib_2.28.8
将glib_2.28.8-1_win32.zip中bin文件夹中的所有dll解压到 glib_2.28.8bin中

结果:
glib_2.28.8bin中存在dll与exe文件
glib_2.28.8lib中存在lib文件
  • LensFun
将下载下来的Lensfun包解压到中,并命名为lensfun
打开CMake
点击browse source,选择 lensfun
然后在"Where to build the binaries"后面填 lensfun-build
(注意以上两个要用真实的路径替换)
点Configure,弹出的对话框选择"Visual Studio 9 2008"/"Use default native compilers",然后finish
这时会提示 Could not find glib2,  手动修改GLIB_BASE_DIR项后面的目录名称为 glib_2.28.8
(注意以上要用真实的路径替换,并注意"_"与"-"的区别)
然后再次 Configure,这时应该只有 GLIB2_DLL-NOTFOUND了,手动将其指定到 bin libglib-2.0-      0.dll
再次 Configure,这时应该没问题了,Generate
打开 lensfun-build lensfun.sln
选择release,生成解决方案
成功之后再仅生成INSTALL

结果:
lensfunbin中存在exe文件
lensfunlib中存在lib文件

  • SWIG
将swigwin-2.0.8.zip解压到

结果: swigwin-2.0.8中存在swig.exe
  • make_3.81
将make-3.81.tar.gz解压到
打开make-3.81make_msvc_net2003.sln 并确认转换
选择"release"
生成解决方案
make-3.81Releasemake_msvc.net2003.exe重命名为
make-3.81Releasemake.exe 

结果:make-3.81Release 目录下存在make.exe
  • ______
2.编译
2.1 生成解决方案
这一步的目的是用cmake和hugin源代码生成可以使用VS编译的解决方案
下载 hugin-2012.0.0.tar.bz2,并解压到

修改 hugin-2012.0.0 CMakeModules FindTIFF.cmake,在26行的
 ${wxWidgets_ROOT_DIR}/src/tiff下面加上 ${wxWidgets_ROOT_DIR}/src/tiff/libtiff,保存退出

打开CMake, 点击browse source,选择 hugin-2012.0.0
然后在"Where to build the binaries"后面填 hugin-build
(注意以上两个要用真实的路径替换)
点Configure,弹出的对话框选择"Visual Studio 9 2008"/"Use default native compilers",然后finish
然后他会提示找不到WxWidgets,把wxWidgets_ROOT_SUFFIX改成2.9.4然后继续Configure
接下来修改Boost_root_suffix,改成_1_43_0, Configure

如果提示
Boost not found.  Bad BOOST_ROOT? On windows, try editing Boost_root_suffix
尝试在系统的环境变量里添加BOOST_ROOT,指向boost_1_43_0

修改GLIB2_BASE_DIR,将最后的文件夹改为 glib_2.28.8,注意 "_"与"-"的区别,configure
在HUGIN_BUILDER项填上自己的名字 ,configure
在HUGIN_BUILDDATE项填上编译的日期,并勾选BUILD_HSIBUILD_HUGINSETUP和BUILD_KEYPOINTS,Configure

修改SWIG_EXECUTEABLE,点击后面的值,右边会出带三个点的浏览按钮,点击并手动选择 swigwin-     2.0.8swig.exe

修改MAKENSIS_EXECUTABLE,将其指向NSIS安装文件夹中的 makensis.exe

这时系统会提示 Configuring done,然后点Generate

2.2 编译
打开 hugin-buildhugin.sln
选择"RelWithDebugInfo"
按住CTRL并点选以下项目:
calibrate_lens_gui
hugin
ptbatchergui
nona_gui
hugin_stitch_project
右键菜单里面选属性->连接器->常规,将"启用增量链接"改为"否(/INCREMENTAL:NO)"

然后生成解决方案

全部生成结束之后在解决方案资源管理器里点选INSTALL

然后点生成->生成INSTALL

完成之后会在hugin-buildINSTALLFILESbin里存在全部生成好的可执行文件,然后再中搜索
lensfun.dll
intl.dll
iconv.dll
libglib-2.0-0.dll
并将这四个文件拷贝入 hugin-build INSTALLFILESbin
此时点击 hugin-build INSTALLFILESbinhugin.exe应该就可以运行了

如果需要打包安装程序的话找到 INSTALL HuginSetup.nsi,右键单击选择Compile NSIS Script就     可以了


ps:
如果需要运行调试,需要执行以下步骤:(以主程序项目hugin为例)
1.修改 项目 属性->配置属性->调试->命令 项为 $(SolutionDir)INSTALLFILESbin$(TargetFileName)
2.修改   项目 属性->配置属性->调试->工作目录 项为 $(SolutionDir)INSTALLFILESbin
3.修改 项目 属性->配置属性->生成事件->声称后事件->命令行 为
  copy $(TargetPath) $(SolutionDir)INSTALLFILESbin$(TargetFileName)
4.对于某些项目,可能需要提供命令行参数,这些参数填在  属性->配置属性->调试->命令参数 栏中

完成以上步骤之后,就可以运行调试了

你可能感兴趣的:(错误解决)