1.前言
之前数次在虚拟机上成功编译Slicer,感觉过程挺简单的。由于科研项目需要在Windows7环境下开发,所以研究了一下。考虑到国内对于3DSlicer的需求很高,然后相关参考文献及资料极其匮乏,本系列博客尝试改变这种现状,所有项目及教程均具有可重复性。
转载标识:Shenziheng/Shenchunxu @Tsinghua Univ.
2.编译
2.1 推荐配置
Windows7 64bit、VisualStudio2013(with Update 5)、Git最新版(current=2.14.1)
Cmake-3.7.1推荐、SVN(推荐SlikSvn)
Notice1:强烈推荐使用64bit操作系统;
Notice2:强烈推荐VS2013兼有Update5更新,否则报错,参考:
https://github.com/Slicer/Slicer/commit/71602609ce2ae5e473ece392500825ca96213371
Notice3:强烈推荐使用SlikSvn(svn就是一个版本控制器,方便我们管理开源代码)。如果有强烈的意愿使用TortoiseSVN (versions that support command line tools),那你要确保你安装了命令行工具,默认情况下,命令行工具功能是Disable关闭的。
3D Slicer4.7.0:这个不用我们单独下载,下面采用Git下载最新版本;
qt-4.8.7with SSL support:官方推荐自主编译,最一点最容易出错,后面最主要介绍的就是他!
2.2 qt-4.8.7-with SSL编译
目前官方推荐的qt-4.8.7-with SSL编译方法如下:
Step1:qt-4.8.7-OpenSSL GitHub文件包
Step2:执行快速编译指令(VS2013->VS2013 x64本机命令提示),执行下述命令:
VS2013 Debug 版本:
@powershell -Command "$destDir='C:\D\Support';$buildType='Debug';$qtPlatform='win32-msvc2013';$bits='64';iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/jcfr/qt-easy-build/4.8.7/windows_build_qt.ps1'))"
VS2013 Release版本:
@powershell -Command "$destDir='C:\D\Support';$buildType='Release';$qtPlatform='win32-msvc2013';$bits='64';iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/jcfr/qt-easy-build/4.8.7/windows_build_qt.ps1'))"
Notice:作者的 qt-everywhere-opensource-src-4.8.7.zip源代码存在错误的地方,必须进行修改,否则会导致QT在线编译一次又一次出错。本文提倡的编译方式如下:
step1:在VS2013 x64本机工具命令提示中运行如上Debug版本代码,密切关注屏幕!!!当出现qt-everywhere-opensource-src-4.8.7.zip DownLoad 100%时,按下Ctrl+C组合件,强行停止命令行继续执行。
step2:打开文件目录C:/D/Support,你会看到everywhere-opensource-src-4.8.7.zip压缩包如下:
step3:修改代码,进入文件目录...qt-everywhere-opensource-src-4.8.7.zip/qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/WebCore/platform 打开文件DefaultLocalizatiaoStrategy.c定位327行看到:
Notice:此处存在两个中文符号“”,是他们导致了qt在线编译的失败,我们需要把它们改成英文的"";
step4:在VS2013 x64本机工具命令提示中继续运行如上Debug版本代码,时间挺长,最后可以看到编译成功提示如下:
2.3 生成Slicer4.7.0平台适应性解决方案
比较方便方法:创建文件夹C:/myProject;
在该文件中,鼠标右键Git Bash Here;输入代码:
1 cd myProjects
2 git clone git://github.com/Slicer/Slicer.git
我们就把GitHub仓库中Slicer4.7.0的代码复制到了本地。
鼠标右键Git Bash Here,键入代码:
1 cd Slicer
2 ./Utilities/SetupForDevelopment.sh
- 使用Cmake生成Slicer源代码生成Slicer.sln
Notice:接下来生成的文件包占用很大的内存空间(我测试之后为14.2G),所以生成的文件不建议放到C盘,本人放到了D盘。
源目录(Browse Source):C:/myProject/Slicer
目标目录(Browse Build):D:/Slicer4D (越短越好)
额外配置属性值(点击Add Entry):
- Value = QT_QMAKE_EXECUTABLE; FilePath = C:\D\Support\qt-4.8.7-64-vs2013-deb\bin\qmake.exe;
- Value = Slicer_USE_SimpleITK; BOOL = 空(不勾选)Debug模式下切记此步骤
然后的点击configure->generate.很快就可以生成。
Frequent Error1: error: Qt 4.7.4 was not found on your system.You probably need to set the
QT_QMAKE_EXECUTABLE variable.
Qt编译错误,或者QT_QMAKE_EXECUTABLE没有设置,或者名字打错了。
Frequent Error2:CmakeError155,missing:Subversion_SVN_EXECUTABLE。
用SlikSVN代替TortoiseSVN,或者在Add entity。前者方案更可靠。
- 在D:/Slicer4D中我们就可以找到CMAKE生成的平台适应的解决方案,Windows下应该为Slicer.sln.
2.4 编译生成Slicer-4.7.0.exe
利用Visual Studio 2013 打开Slicer.sln,显示如下:
一般会有53各项目,选择ALL_BUILD,右键单击生成,此时情况下拼得就是网速了,因为该过程需要在线下载Python、vtk、ITK等工具包,编译时间很大程度上取决于网速了。
一般该过程很难出错,如果出错重启计算机,再试一次。
编译之后,我们便得到一大批XXXXX-build文件夹,其中最重要的是Slicer-build。因为里面有运行程序slicer.exe以及断点调试程序SlicerApp-real.exe(Slicer.sln debug 模式下),下面会详细讲。具体如下:
有了这两个文件,我们就能单步调试Slicer源码,以及我们的代码。
3.Debug与单步调试
Notice:对于VS2013用户,请严格遵循下面方式开启IDE,否则你将遇到一大批***.dll不存在、Memory LEAKs、ImportERROR...
- 在cmd.exe中运行Slicer.exe --VisualStudio,启动VisualStudio。
- 在VisualStudio3013中打开文件...Slicer-build/Slicer.sln
- 设置SlicerApp为项目启动项(右键点击SlicerApp项目,选择设置项目启动项)
- 调试(Debug Menu)->启动调试(Start Debug,F5),出现了我们期待已久的界面:
4.参考资料
[1]https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/Debug_Instructions#Windows
[2]https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/Debug_Instructions#Windows