3D Slicer5.7在win11下的源码编译安装

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 ScriptQt WebEngine

官方的python脚本翻译需要Qt6.3.0及以上版本,截至目前还没完全启用。
Linux需要5.12版本的QT

  • Visual Studio 2022(需要包含C++桌面开发v143工具集组件)

VS2019的v142工具集官方没有测试,但是通过其他博客看来,可能仍然有效果


1.2 注意事项

  1.  与常见的另一款工具ITK-SNAP不同,ITK-SNAP在构建之前需要对依赖的库例如CURL,VTK,OpenCV,ITK进行单独的构建,然后在ITK-SNAP本体进行configure的时候链接到相关的库;
    而Slicer的源码中,在其源码的子文件夹 \SuperBuild 里已经包含了自身依赖的库,这也是Slicer源码构建工程庞大的原因。

  2.  Slicer是基于python和C++开发的,在构建的过程中也会用到python的库,但是正如上面提到,Slicer自身包含了相关依赖,这个包含也包括了Python在内,所以构建过程中,如果主机本体在其他位置也有python环境,可能导致构建时候错误调用,没有使用到Slicer自身需要的python环境。所以,请在构建的过程中删除环境变量中的有关python的所有引用,或者对其他python暂时性的重命名。

  3.  需要准备科学上网的方式,前面提到,Slicer整体大项目是会自己构建自己需要依赖的库,所以Slicer会去github上自行下载相关依赖的源码,而你需要为其准备一个稳定的网络环境,并且最好打开全局模式,如果你使用的是Clash,最好还要打开TUN mode。从网络上的博客来看,绝大部分问题都是网络问题,所以可以反复进行构建,直到剩下构建失败的项目不再变化。
     值得一提的是,在构建到最后的时候,还需要关闭一下科学上网,因为当需要从github拉取的操作完成后,后续还会通过Slicer的python进行pip安装一些相关库,而这个过程如果有代理很可能会导致失败。


1.3 配置文件夹

 需要新建一个文件夹作为源码目录,然后在源码目录下或者同级目录新建build文件夹。
 样例:
源码文件夹:D:\S\Src
编译文件夹:D:\S\Bd


注意:

  • 路径名不要太长,使用尽量少的字符;

三到四级深的目录后续可能会报错字符长度超过250个。

  • 不建议在路径名中包含空格字符;
  • 如果要分别构建Release模式和Debug模式的Slicer,源码目录相同,而编译目录最好进行区分,可以为Build-RBuild-D

2. 编译

源码

 建议直接拉取Github的源码进行编译,据说直接下载源码编译会在最后编译的时候报错。
将源码拉取到前文创建的源码目录:D:\S\Src(请根据实际情况修改,本文的两个目录路径都只作为演示)
这是拉取命令:

git clone https://github.com/Slicer/Slicer.git .

 注意命令末尾的点不能省去,如果省去的话git会在当前目录中额外创建一个slicer子文件夹。

CMake配置

  1.  源码路径(where is the source code)和编译路径(where to build the binaries)根据自己所命名的路径进行选择:
  1.  路径配置完成后,在Cmake中点击add entry,新建一个Qt5_DIR,类型为PATH,具体指向你个人的QT安装路径下的该文件夹:
$QT_INSTALL_PATH$/Qt5.15.2/5.15.2/msvc2019——64/lib/cmake/Qt5

路径需要根据自己的实际QT路径情况进行修改。

  1. 如果需要在Release模式构建,有两种处理方法:
     - 在最后Visual Studio进入解决方案(slicer.sln)后,在顶部栏中选择Release即可。
     - 在CMake中,把参数CMAKE_CONFIGURATION_TYPES修改为只有Release的形式,这个方案可以很大程度规避一些人为遗忘导致的错误勾选Debug模式。

  2.  路径和参数都添加完毕后,点击Configure,配置选择Visual Studio 17 2022和x64平台,

  3.  多次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文件夹的路径,然后再configuregenerate解决方案,接着open project打开解决方案,在VS中生成ALL_BUILD


3. 在生成CTK的ALL_BUILD时候可能会在项目PythonQt报错,还是用cmake-gui打开build\CTK_build\PythonQt_build,不用修改,configuregenerate解决方案,接着open project打开解决方案,在VS中生成ALL_BUILD,最后生成INSTALL项目来安装PythonQt


4. 再次回到CTK解决方案中,生成ALL_BUILD,编译完成后INSTALL就行。


5. 最后再次回到Slicer中,生成ALL_BUILD

  • CTK项目gbk error
    报错CTK报错了一个这个问题,检索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的一些导入。
不过遇到的编译问题倒是和之前相差无几。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值