3DSlicer在Windows下源码编译运行(20231127待补充)

目录

一、3DSlicer是什么?

二、为什么要源码编译?

三、一些注意事项

1.花费时间和文档

2. Slicer的环境和依赖

3.编译成功的顺序

4.特别注意

四、环境准备阶段

五、git拉取阶段

1.fatal: early EOF fatal: index-pack failed

2.fatal: Not a git repository (or any of the parent directories): .git

3.OpenSSL SSL_connect: Connection was reset in connection to github.com:443

六、cmake——buliding阶段

1.cmake配置

2.cmake的问题

七、VS编译阶段

坑1:  编译 Visual项目时出现错误消息:"错误 C2471︰ 无法更新程序数据库"

坑2:  遇到了threadcontent类似于这个的一个报错,没有具体截图了

坑3:  visual studio连接不上github解决方法

坑4:  VTK项目中遇到 无法识别的符号,imp_py 开头的一些函数。这里忘记截图了~

坑5:  python-dicom-requirements 报错 error MSB6006: “cmd.exe”已退出,代码为 1

坑6:  Slicer 项目报错 error MSB6006: “cmd.exe”已退出,代码为 1

坑7:如果是python-setuptools报错或者PyQT5什么的有关Python的:

八、运行使用阶段

 九、总结


一、3DSlicer是什么?

  对于医疗图像数据可视化有一些比较成熟的开源软件库,其中包括volview(2011年已经停止维护和更新),MITK(德国非中科大版),3Dslicer和ITK-SNAP。而其中3Dslicer功能非常的强大但是也是代码量最多的。可以去它的官网直接下载打包好的程序,支持windows、apple、linux三个平台,生态还是比较健全的。slicer还有一个比较方便的地方是支持c++和python开发,支持python的话可以快速验证深度学习的一些算法,这里就比较方便嵌入一些AI的服务器系统了,开发速度比较快。让人觉得3DSlicer更像是一个框架,可以嵌套或者叫做以插件模式进行扩展包使用。

二、为什么要源码编译?

        有的时候需要对3DSlicer进行修改,比如你的公司想使用自己的布局还有logo等,此时就需要对源码进行编译修改,当然我觉得大部分还是对其Extension也就是扩展包的研发,所以可以先明确是否真的需要源码编译,不需要就直接安装3DSlicer就行,然后去开发Extension导入3DSlicer直接使用。下面就是本人在windows平台下如何配合visual studio进行编译的整个过程。

三、一些注意事项

1.花费时间和文档

了大概本人2天时间,可能倒霉遇到了很多坑,有些问题都已经记不起来了或者没有截图详细记录,总算是最后能运行了,不过还有些问题需要更改,所以也希望有更好或者解决办法的人在下边讨论评论一起进步。

先贴几个比较官方的连接:

3DSlicer官网

https://www.slicer.org/

3DSlicer官方文档

https://slicer.readthedocs.io/en/latest/developer_guide/build_instructions/index.html

外网论坛

https://discourse.slicer.org/

中文论坛

https://forum.slicercn.com/

2. Slicer的环境和依赖

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

3.编译成功的顺序

其实网络上已经有好心人做了比较详细的一些坑的讲解和解决方案了,但是我在这里还是提醒一下,最好注意顺序,特别是一些步骤的顺序,有时候会让人卡蛮久,就是想当然了结果出现一直编译不过的问题。

4.特别注意

特别需要注意的是:一定要能科学上网,懂的都懂,你的科学上网越稳越好。

毕竟是国外的开源项目,要访问github,去拉取源码,如果不行就有点难了。不能科学上网的就自行去搜索一些国内镜像网站之类的吧,本人坚持需要科学上网的方法。

四、环境准备阶段

Windows11 22H2 x64
Windows SDK 22000

Cmake >= 3.16.0
Git       >= 1.7.10

VS >= 2019

Qt5 是>=5.15.2    下载地址https://download.qt.io/official_releases/online_installers/ 选择 qt-unified-windows-x64-online.exe 只能在线安装了,同时QT必须安装MSVC2019 64-bit,QTWebEngine和QTScript

Python 版本 3.9.0 

NSIS 可选 (程序打包的时候使用的,即打包成一个exe文件,可以在别人电脑上安装你写好的程序)

五、git拉取阶段

前面的环境我用的是前面的,我建议参考官方文档或者是一定要大于我的版本,然后拉取不要拉取最新的3DSlicer的版本,这个坑我是编译运行了之后才发现的就是:插件Extension在3DSlicer中访问不到任意一个的扩展包

这个问题在cmakelists.txt里面能看到,这个version版本号和你的拉取有关,当我自己复刻了仓库并自行提交了几个更改后,再进行拉取,我的版本号直接快了拉取官方的构建好几个版本,比如我自己构建的时候官方的版本号是32875,但是访问的时候就是不行,改了网址后面的id(32390)之后就可以看到那些扩展插件了,方法就是改变根目录cmakelists.txt文件中的参数slicer_forced_revision的值,强制设定之后重新编译就可以正常访问了。但是巨麻烦要重新编译,去看了社区好像没啥其他办法解决,就是因为版本更新迭代太快了,出现的小bug吧,总之拉取代码拉之前版本一点的就好,稳定一点。

需要新建一个文件夹作为源码目录,然后在源码目录下或者同级目录新建build文件夹。

样例:
源码文件夹:D:\Work\Src
编译文件夹(Debug):D:\Work\Bulid_D
编译文件夹(Release):D:\Work\Bulid_R

路径名不要太长,使用尽量少的字符;
三到四级深的目录后续可能会报错字符长度超过250个。

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

拉取过程不仅要科学上网,还有一些git的设定需要,如果遇到这些问题:

1.fatal: early EOF fatal: index-pack failed

出现这个问题的原因是要clone文件太大需要讲文件压缩,解决方法是在git_bash中输入:
git config --global core.compression 9

2.fatal: Not a git repository (or any of the parent directories): .git

产生这个的问题的主要原因是没有初始化git本地版本管理仓库,所以无法执行git命令。解决方法是以管理员身份运行git_bash,然后输入“git init”命令。

3.OpenSSL SSL_connect: Connection was reset in connection to github.com:443

产生这个问题的主要原因可能与你使用了VPN有关,这时候需要设置http.proxy就可以了。
一定要查看自己的VPN端口号,假如你的端口号是1234,在git bash命令行中执行以下命令:

git config --global http.proxy 127.0.0.1:10810
git config --global https.proxy 127.0.0.1:10810

源码git网址

https://github.com/Slicer/Slicer

找到对应的你想下载的版本的Slicer就可以用git拉取了,如果你直接使用下面这个命令,就是拉取最新的版本,建议不要用最新版本。 

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

六、cmake——buliding阶段

1.cmake配置

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

 QT_INSTALL_PATH/Qt5.15.2/5.15.2/msvc2019——64/lib/cmake/Qt5

3.路径和参数都添加完毕后,点击Configure,配置选择Visual Studio 16 2019和x64平台,    4 . 取消 BUILD_TESTING  取消Slicer_USE_QtTesting 只使用Debug和Release2个编译
5.需要能够科学上网
6.点击Generate
3DSlicer在Windows下源码编译运行(20231127待补充)_第1张图片

2.cmake的问题

cmake的时候会出现一个报错,报错文件是CMake\SlicerCheckCMakeHTTPS.cmake,如图

3DSlicer在Windows下源码编译运行(20231127待补充)_第2张图片

文件中有个url是"https://raw.githubusercontent.com/Slicer/Slicer/main/CMakeLists.txt" ,可以改为国内能自由访问的网址如"www.baidu.com" 。这样来规避此问题,亲测有效。
 使用科学上网,这样也可以成功解决该问题。如果开启科学商务区依然没有解决,可以尝试打开全局模式,或者关闭wifi重新开启。当然本人没有成功,我还是用的改成百度网址的方式。

其他问题的话基本上跟科学上网有关。

七、VS编译阶段

点击Open Project 打开vs2019,打开All_build.pro右击All_build进行生成,这里需要能够科学上网,因为需要下载一些库。如果失败了先别管多试几次,网络不好会报错timeout的。

3DSlicer在Windows下源码编译运行(20231127待补充)_第3张图片

有时候重新打开的项目时会遇上无法更新数据库的情况,写的具体错误是无法打开debug中的pdb文件,看了百度上的方法,重新生成解决方案或者删除debug文件夹重新编译,重新生成解决方案后可以看到debug文件夹中的所有文件都消失了,我遇到之后是去找到跑错的那个文件,然后删掉了它父文件的pdb文件,我重新生成并不能抹除这个文件。

坑2:  遇到了threadcontent类似于这个的一个报错,没有具体截图了

这个时候的现象就是停止了编译和下载,vs就和卡住了没啥区别,然后我的解决办法就是切出任务管理器,然后强行关闭,搜索后台的linker,发现一个ms vs有关的后台程序,也给它杀了,然后重新打开,生成就会继续走了,这个问题比较冷门,没什么人遇到,纯靠我自己乱来,希望能帮到你们。

坑3:  visual studio连接不上github解决方法

unable to access ‘https://github.com/xxx/xxxxx/xxx: Failed to connect to
根据提示可知visual studio连接github失败,注意,你能访问到github的官网,不代表vs能够成功访问,这是两码事,解决方法:

1.进入网络和internet->代理

2.编辑手动代理设置

3.记住端口号,大部分都是7890,我是10810

4.输入git config --global http.proxy http://127.0.0.1:10810
修改后可输入git config --global -l查看是否修改成功。

5.完成 vs成功克隆github项目。


坑4:  VTK项目中遇到 无法识别的符号,imp_py 开头的一些函数。这里忘记截图了~

错误原因,VTK中的 \VTK-build\Wrapping\PythonCore\vtkWrappingPythonCore.vcxproj 项目会需要用到系统安装的python模块。一般都是cmake定位,当你选择编译Debug版本,但安装的版本没有对应的python3.6_d.lib的时候会报错。
解决方案:重新安装新的python后解决。


坑5:  python-dicom-requirements 报错 error MSB6006: “cmd.exe”已退出,代码为 1

错误原因,D:\d\S411R\python-install目录下 pip 的安装失败,
解决方案:用我们系统安装python\Scripts\目录下的 pip.exe 等替换掉 D:\d\S411R\python-install 下的程序可解决。


坑6:  Slicer 项目报错 error MSB6006: “cmd.exe”已退出,代码为 1

错误原因:编译参数错误,可以查看 D:\d\S411R\Slicer-build\CMakeFiles下的CMakeError.log 和 CMakeOutput.log
解决方法:一堆看不懂的参数,我暂时没有找到可以修改编译参数就能解决的方案,右击All_build进行生成,这里需要能够科学上网,因为需要下载一些库。如果失败了先别管多试几次,网络不好会报错timeout的。

3DSlicer在Windows下源码编译运行(20231127待补充)_第4张图片

坑7:如果是python-setuptools报错或者PyQT5什么的有关Python的:

错误原因:pip install的方式访问的是国内的一些镜像网站啥的,有时候不能科学上网,不然访问不到

解决方法:停止科学上网。

特别注意,有个非常搞的设定就是python的pip下载有些是不能在科学上网的时候进行的,是会失败的,而编译中拉取git或者外网的时候又需要科学上网,这就非常矛盾,我的方法就是反复编译,一会正常国内网,一会科学上网,当然你可以根据报错或者我总结的上面的坑来判断是需要科学上网还是留在国内网络了,熟能生巧,知道47个解决方案全部编译通过,毕竟我这么过来的,经历了两天的折磨,大部分时间都是在这个上面。

八、运行使用阶段

接下来是调试debug阶段了:

如果你先开了vs然后导入项目遇到 缺少QT5widgets.dll,缺少CTKwidget.dll等问题,通过命令行启动,打开cmd定位到 D:\work\S\Slicer-build 目录下后,执行

./Slicer.exe --VisualStudioProject

会自动打开工程。设置SlicerApp为启动项目,点击运行,成功之后就会开始运行 3D-slicer程序了。 


3DSlicer在Windows下源码编译运行(20231127待补充)_第5张图片3DSlicer在Windows下源码编译运行(20231127待补充)_第6张图片3DSlicer在Windows下源码编译运行(20231127待补充)_第7张图片

 九、总结

到此为止,总结就差不多了,当然由于我文章是补的,所以有些问题我可能遇到了,找到解决方法了,但是忘记了,没有记录,请在评论中留言,我看到如果知道的话会回复的,当然文章中一些原因和解决方法错误也请指出。

你可能感兴趣的:(3DSlicer,windows,c++,开源,python)