0. 前言
本博客主要参考官方安装文档
以及部分CSDN的博客,部分内容的书写会直接参考官方文档的内容。
同时,如果遇到了一些匪夷所思且完全找不到方向的报错,可以尝试去社区搜索相关报错或者提问,开发者们都比较活跃。
这是社区
Slicer依赖于一些大型的第三方库,例如VTK、ITK和DCMTK,构建时间很长,占用空间较大,笔者使用的的Debug模式进行构建,使用了60G的磁盘空间,如果需要进行后续开发,建议准备更多的磁盘空间。
根据官方文档所写,在台式机电脑上预计花费3-4小时,在笔记本电脑上可能会花费8-12小时(不同配置可能会有差距)。
项目整体极其庞大,解决方案和子项目众多,笔者的构建文件夹中总共有接近20w个文件。
1. 准备
1.1 环境
笔者所用的相关配置如下:
- Windows11 22H2 x64
- Windows SDK 22000
- Git 2.38.1
- Cmake 3.26.0
在七月的源码cmakelists中,cmake版本3.21.0和CMake >=3.25.0,<=3.25.2的版本不受支持,请选择其他版本的cmake。
否则可能会报错FATAL_ERROR "CMake version is 3.21.0 and using CMake==3.21.0 is not supported.
这个不是固定的,需要根据你源码里所提示的进行更换cmake版本。
- QT 5.15.2 (必须包含的组件有:MSVC2019 64-bit,Qt Script , Qt WebEngine)
官方的python脚本翻译需要Qt6.3.0及以上版本,截至目前还没完全启用。
Linux需要5.12版本的QT
- Visual Studio 2022(需要包含C++桌面开发、v143工具集组件)
VS2019的v142工具集官方没有测试,但是通过其他博客看来,可能仍然有效果
1.2 注意事项
-
与常见的另一款工具ITK-SNAP不同,ITK-SNAP在构建之前需要对依赖的库例如CURL,VTK,OpenCV,ITK进行单独的构建,然后在ITK-SNAP本体进行configure的时候链接到相关的库;
而Slicer的源码中,在其源码的子文件夹\SuperBuild
里已经包含了自身依赖的库,这也是Slicer源码构建工程庞大的原因。
-
Slicer是基于python和C++开发的,在构建的过程中也会用到python的库,但是正如上面提到,Slicer自身包含了相关依赖,这个包含也包括了Python在内,所以构建过程中,如果主机本体在其他位置也有python环境,可能导致构建时候错误调用,没有使用到Slicer自身需要的python环境。所以,请在构建的过程中删除环境变量中的有关python的所有引用,或者对其他python暂时性的重命名。
-
需要准备科学上网的方式,前面提到,Slicer整体大项目是会自己构建自己需要依赖的库,所以Slicer会去github上自行下载相关依赖的源码,而你需要为其准备一个稳定的网络环境,并且最好打开全局模式,如果你使用的是Clash,最好还要打开TUN mode。从网络上的博客来看,绝大部分问题都是网络问题,所以可以反复进行构建,直到剩下构建失败的项目不再变化。
值得一提的是,在构建到最后的时候,还需要关闭一下科学上网,因为当需要从github拉取的操作完成后,后续还会通过Slicer的python进行pip安装一些相关库,而这个过程如果有代理很可能会导致失败。
1.3 配置文件夹
需要新建一个文件夹作为源码目录,然后在源码目录下或者同级目录新建build文件夹。
样例:
源码文件夹:D:\S\Src
编译文件夹:D:\S\Bd
注意:
- 路径名不要太长,使用尽量少的字符;
三到四级深的目录后续可能会报错字符长度超过250个。
- 不建议在路径名中包含空格字符;
- 如果要分别构建Release模式和Debug模式的Slicer,源码目录相同,而编译目录最好进行区分,可以为
Build-R
和Build-D
;
2. 编译
源码
建议直接拉取Github的源码进行编译,据说直接下载源码编译会在最后编译的时候报错。
将源码拉取到前文创建的源码目录:D:\S\Src
(请根据实际情况修改,本文的两个目录路径都只作为演示)
这是拉取命令:
git clone https://github.com/Slicer/Slicer.git .
注意命令末尾的点不能省去,如果省去的话git会在当前目录中额外创建一个slicer子文件夹。
CMake配置
- 源码路径(where is the source code)和编译路径(where to build the binaries)根据自己所命名的路径进行选择:
- 路径配置完成后,在Cmake中点击
add entry
,新建一个Qt5_DIR
,类型为PATH
,具体指向你个人的QT安装路径下的该文件夹:
$QT_INSTALL_PATH$/Qt5.15.2/5.15.2/msvc2019——64/lib/cmake/Qt5
路径需要根据自己的实际QT路径情况进行修改。
-
如果需要在Release模式构建,有两种处理方法:
- 在最后Visual Studio进入解决方案(slicer.sln)后,在顶部栏中选择Release
即可。
- 在CMake中,把参数CMAKE_CONFIGURATION_TYPES
修改为只有Release
的形式,这个方案可以很大程度规避一些人为遗忘导致的错误勾选Debug模式。 -
路径和参数都添加完毕后,点击
Configure
,配置选择Visual Studio 17 2022
和x64平台, -
多次
configure
直到没有红色的参数出现,点击Generate
生成解决方案,然后点击Open Project
打开该解决方案。
- 一个问题:
在部分博客中提到了cmake的时候会出现一个报错,报错文件是CMake\SlicerCheckCMakeHTTPS.cmake
,文件中有个url是"https://raw.githubusercontent.com/Slicer/Slicer/main/CMakeLists.txt" ,可以改为国内能自由访问的网址如"www.baidu.com" 。确实可以这样来规避此问题,亲测有效。
不过我自己是使用科学上网,这样也可以成功解决该问题。此外,如果开启科学上网依然没有解决,可以尝试打开全局模式,或者关闭wifi重新开启。
(网络类型的错误还是得多尝试)
3. Visual Studio
进去解决方案,直接生成ALL_BUILD
项目,然后就开始等待了。(该过程会比较漫长)
在该部分遇到的部分问题可以参考下文的 VS中问题汇总
启动项目
当前的sln项目所在的目录,是我们的build目录,其中包含特别多的子解决方案,包括CTK、ITK、DCMTK、VTK、CURL等,也包括了一个名为Slicer的子解决方案,路径为build\Slicer-build\Slicer.sln
,打开这个子解决方案,就可以看到Slicer的源码了。
正确的打开方式应该是:
通过终端进入当前的build目录,即D:\S\Bd
cd Slicer-build
./Slicer.exe --VisualStudioProject
通过命令打开的VS,才能正确的运行slicer软件。
进入VS后也可以先找到All Build
进行一次生成,没有报错后再修改启动项。(这一步不是必须的,如果后期项目源码有修正,可以使用这一步)
在这个解决方案中,选择左侧的App-Slicer文件夹,将里面的SlicerApp设置为启动项,然后运行项目,就可以成功启动Slicer了,同样,在$Build$\Slicer-build\Slicer.exe
也可以启动Slicer。
VS中问题汇总
汇总的问题多来自于笔者和团队成员遇到的问题,笔者和团队成员的环境都相似,基本都有这些问题,可能具有一定的普适性,如果你遇到了不一样的问题,可以考虑看看环境是否一致。
- 在错误列表中显示的报错可能较多而且不好定位问题所在,可以在输出中,搜索关键词
error
,挨着查找输出给出的错误,能够查看输出的错误详细信息。
- 在ALL Build的过程中,你能在输出标签栏看到一些在github上的拉取操作,如果反复提醒你连接失败,可能是没有科学上网,没有开启全局模式或者TUN模式,确保你的VS能够正常访问github(光浏览器可以访问还不够)。保证成功开启科学上网。
- 当没有github的拉取操作后,还是有项目生成失败,在错误中可能会发现
python-\*
命名的项目生成失败了,可能能发现是在调用PythonSlicer.exe
执行-m pip install
相关操作失败了,这时候就关闭科学上网,笔者是因为在自身的代理环境下,python没法访问相关的镜像去下载库,所以导致了失败。
- CTK的MSB8066报错:
1. 在目录
\build
下能看到一个名为CTK_build
的目录,在这个位置新建一个CTK_install
文件夹,注意是和CTK_build
同级
2. 然后用Cmake-gui去打开CTK_build
,将参数CMAKE_INSTALL_PREFIX
的值修改为刚刚创建的CTK_install
文件夹的路径,然后再configure
和generate
解决方案,接着open project
打开解决方案,在VS中生成ALL_BUILD
3. 在生成CTK的ALL_BUILD
时候可能会在项目PythonQt报错,还是用cmake-gui打开build\CTK_build\PythonQt_build
,不用修改,configure
和generate
解决方案,接着open project
打开解决方案,在VS中生成ALL_BUILD
,最后生成INSTALL
项目来安装PythonQt
4. 再次回到CTK解决方案中,生成ALL_BUILD
,编译完成后INSTALL
就行。
5. 最后再次回到Slicer中,生成ALL_BUILD
- CTK项目gbk error
报错了一个这个问题,检索error发现是和gbk编码相关的,这个就直接去对应的文件去修改该问题。
找到报错的文件路径:build\CTK\CMake\ctkWrapPythonQt.py
,文件第92行:
添加内容encoding = "utf-8"
,然后再进行ALL_BUILD就没问题了。
- 进入软件后,插件界面不加载
SPKC
在这个网站去找有效的版本号。
尽量避开在早上构建Slicer,看意思在欧美时间的夜晚可能构建的night版本加载不出来扩展
这个问题在cmakelists.txt里面能看到,这个version版本号和你的拉取有关,当我自己复刻了仓库并自行提交了几个更改后,再进行拉取,我的版本号直接快了拉取官方的构建好几个版本,比如我自己构建的时候官方的版本号是31876,我拉取下来是31877,官方次日更新到31878,我自行修改后,版本号变成了31885。
SPKC上压根没有我自己修改后生成的版本号,所以我在cmakelists里强制修改了我的版本号。
方法就是改变根目录cmakelists.txt
文件中的参数slicer_forced_revision
的值,我强制设定为了31878,之后重新编译就可以正常访问了。
#set(Slicer_FORCED_REVISION "" CACHE STRING "Overwrite value of automatically set Slicer_REVISION")
set(Slicer_FORCED_REVISION "31878")
截止博客撰写时间,最新的版本号是32900
4. 博客更新日志
23-07更新:
7月再次用源码构建了Slicer,在这几个月中也重复构建了几次,这里会更新一些版本的相关问题,例如cmake的版本要求又发生了变化。
之前构建完成后经常出现扩展页面空白的情况,现在勉强搞清楚了原因。
24-06更新:
补充了几个细节问题,完善了整体的构建流程。例如命令行打开slicer-build
项目。
24-08-07更新:
这次尝试把源码升级到了Slicer5.7.0,从5.3.0到5.7.0的变化有不少。
比如EditorEffects
下Python代码可以进行翻译了,不过源码编译版本目前翻译失败了,还在寻求官方社区的帮助。
此外更新中还涉及到了DICOM的一系列更改优化,另外笔者还注意到更新后的代码有涉及到ITK-SNAP的一些导入。
不过遇到的编译问题倒是和之前相差无几。