VS2015+Qt5.7.0+PCL1.8.1+VTK8.0 环境配置步骤


恭喜你找到了这篇文章。

笔者最近的工作需要用到Qt写有关点云处理的很多功能,这个过程中的坑实在是太多。(忍不住要吐槽一下,PCL+VTK直接弹窗显示点云很简单,但是将VTK嵌入Qt来显示点云简直瞬间提升到了地狱级的配置难度,主要原因有二:其一,PCL自带的VTK不完整,不支持Qt嵌入,需要自己从VTK的源码重新编译并替换PCL附带的版本;其二,这其中的很多步骤不仅繁琐,而且做错一些细节之后很难发现,且很难回头找到原因)。

综合几天以来踩过的所有坑,我写下了这篇可能是目前全网能查到的最可靠、最详细的文章。 本文会详细地记录所有步骤。为了写本文,我特地将之前的配置全部清除重新开始,一步一步截图和解释。如果你能看到此文,就说明我按照这套步骤又再次配置成功了。因此,按照本文一步一步做到最后,相信你也可以配置成功。事不宜迟,马上开始。

1. 环境准备

1.1. 版本信息

本文所有操作均在Windows 10 21H2版本(见下图)下完成。
在这里插入图片描述

有关系统版本的注意事项

对于Windows 10用户,只要你的版本不是太旧,基本都不会在系统这一层有任何问题。

对于Windows 7用户,配置过程中我亲测不会出现任何问题,但是在最后一步(运行VTK自带Qt示例)时,会出现无法解决的“找不到rc.exe”的问题。据查,手动安装Windows 7 SDK可以解决此问题,因此使用Windows 7的读者可以先按本文配置好后自行测试这个小问题的解决方案。

以下是我用到的所有相关软件包的版本,并全部按照默认路径安装。如果按本文步骤配置的话,请尽量与我的下列版本一致,否则可能会遇到本文内容以外的问题。另外,如果你修改了安装路径(不建议),那么请将我的所有相关路径替换为你修改后的路径。

名称 版本 对应文件
Visual Studio 2015 Update 3 一个文件: cn_visual_studio_professional_2015_with_update_3_x86_x64_dvd_8923256.iso
Qt 5.7.0 MSVC2015 x64 一个文件:qt-opensource-windows-x86-msvc2015_64-5.7.0.exe
PCL 1.8.1 MSVC2015 x64 两个文件:PCL-1.8.1-AllInOne-msvc2015-win64.exe pcl-1.8.1-pdb-msvc2015-win64.zip
VTK 8.0.0 (源码) 两个文件:VTK-8.0.0.zip VTKData-8.0.0.zip
CMake 3.21.2 (with GUI) x64 一个文件:cmake-3.21.2-windows-x86_64.msi

1.2. 安装VS2015

安装VS2015时,建议务必使用Update3版本(Update2甚至更早的版本存在已知的严重问题可能导致系统崩溃,详见VS2015 Update3的官方发布说明)。对于本文所涉及的工作,仅安装VS2015的C++工具就已足够(如下图)。如有其它需要,可再勾选其他组件。
在这里插入图片描述

1.3. 安装Qt

安装Qt时,请务必勾选安装源码(如下图),否则后续编译VTK时会找不到部分路径。勾选后,在Qt安装过程中,会在安装源码这一步花费较长时间(安装程序甚至可能会暂时无响应长达数分钟),只需耐心等待就好。
在这里插入图片描述

在安装好Qt之后,需要在VS中安装Qt Visual Studio Tools
在这里插入图片描述在这里插入图片描述安装完成后,每次VS启动时,这个拓展工具会进行一段初始化,类似下图的状态。(安装后首次初始化大概五分钟左右,之后每次启动初始化会很快。如果一直卡在这个初始化中的状态,可重开VS再试)
在这里插入图片描述
待初始化完成后,我们进行这个拓展工具的首次配置(链接到已安装的Qt)。
在这里插入图片描述在这里插入图片描述

如果你像我一样,在上图这里可以看到已安装的Qt版本,那么说明自动配置成功,你不必做任何操作,可以继续往下看。否则,请手动配置版本。
在这里插入图片描述在这里插入图片描述

1.4. 安装PCL

在安装PCL时,请务必选择“添加到环境变量”(如下图)。后面的步骤我们还会二次检查这里添加的环境变量是否正确。
在这里插入图片描述
选择安装全部组件。
在这里插入图片描述
在安装过程中,会弹出OpenNI2的独立安装窗口。建议修改OpenNI2的安装路径到PCL预留的路径下,而非其默认路径(见下图)。这样做的好处是便于管理,文件结构比较清晰。
在这里插入图片描述然后,我们需要检查一下环境变量是否已经配置正确。
直接在开始菜单旁的搜索框中搜索 “环境变量” ,打开环境变量配置窗口。
在这里插入图片描述检查你的系统变量中的项目是否与下面我给出的截图中红色框选出来的项目一致(注意是窗口中偏下的那个“系统变量”列表,不是偏上的用户变量列表),如果有缺失或者不一致,就需要手动添加或者修改:
在这里插入图片描述
除了以上这四个,还需要将相关dll文件所在的几个目录(见下图)加入path变量,否则后续的样例会有找不到dll文件的问题(当然,将dll文件路径加入环境变量只是临时解决方案,发布程序给用户时,还是要将所有依赖到的dll文件一齐打包发布)。
在这里插入图片描述要注意的是,此处环境变量的配置可能需要注销用户并重新登录,或者重启电脑后才会生效。所以到这里最好先重启一下再进行后面的步骤

1.5. 编译PCL的Tutorials

PCL Tutorials(按默认安装路径的话)位于C:\Program Files\PCL 1.8.1\share\doc\pcl-1.8\tutorials\sources。这其中包括了很多官方提供的样例,可用于测试我们的安装和配置是否成功,以及后续自己学习PCL的各种写法。
在这里插入图片描述接下来,使用CMake编译它。
在tutorials文件夹下新建一个叫做build的文件夹,一会儿编译生成的文件就输出到这里。
在这里插入图片描述启动CMake,选择源码路径到sources,选择编译输出路径到build
勾选GroupedAdvanced的显示方式。
然后点击Configure,选择VS2015(版本号为14)以及x64平台。(如下图)
在这里插入图片描述点击Finish之后,如果提示CMake Error: Cannot open file for writeCMake Error: : System Error: Permission denied,说明你的PCL安装路径是需要管理员权限才能修改内容的。此处建议一步到位,修改整个PCL安装目录的权限(将“所有软件包”和“所有用户”都设为具有 “完全控制” 权限):
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

之后,回到CMake重新点一次Configure,就可以成功执行。
等待一会儿,Configure执行完成后,列表中会有一些依赖软件包提示找不到。没有关系,如果用不到没找到的软件包,就可以忽略此处的错误(如果用得到与其中某些依赖软件包有关的样例的话,就需要提前安装好所需的软件包,然后回来在列表中配置路径)。只要最下方的输出是Configuring done,就可以继续往后做。
在这里插入图片描述点击Generate后,再等待一阵,直到最下方又出现了Generating done。然后点击Open Project
在这里插入图片描述点击Open Project之后,CMake会自动帮你打开VS2015并加载相应的所有样例工程。这一步余下的工作就是在VS2015中的操作。
选择Releasex64版本,然后右键ALL_BUILD,选择“生成”。
在这里插入图片描述
编译过程中会输出很多warning信息(如C4819和C4996),都可以忽略,等待编译结束就好。这一步根据电脑配置不同,可能需要十分钟左右。
编译完成后,可能会提示有部分样例编译失败(如下图,属正常情况,毕竟刚才在CMake中未配置所有的依赖库)。少量的失败项目可以忽略,如果绝大部分项目甚至所有项目全都编译失败,就要回去检查CMake中的步骤是否有错误,然后重新做一遍后续的所有步骤,直到大部分项目都编译成功。
在这里插入图片描述

1.6. 使用官方样例检查以上配置是否全部正确

还是在上面这个VS窗口里,将pcl_visualizer_demo设为启动项目(如下图)。
在这里插入图片描述然后,在项目属性中,将此样例项目的命令参数设置为**-c**(如下图)。
在这里插入图片描述然后点击运行。如果你能看到下图的效果(可能需要向下滚轮来缩小视图),那么恭喜你,截至目前,你的所有步骤都是正确完成的。
在这里插入图片描述

2. 编译VTK库并集成到PCL和Qt

在前面的步骤中你可能也会注意到,其实PCL的安装是集成了VTK在里面的。但是有一个天坑是,PCL1.8.1所集成的VTK8.0与VTK官网发布的原版VTK8.0有一些差异,导致在Qt中集成PCL的时候,会出现很多莫名其妙的问题。 这些问题包括(如果你在将PCL集成到Qt时遇到下面的问题,大概率是因为PCL中的VTK不完整):

  • 找不到函数
  • Qt窗口无法添加QVTKWidget(由QWidget提升失败,或者Designer中无此控件)
  • 与QVTKWidget有关的链接错误(找不到lib文件,或者符号错误)

  • 你可能会在网上搜到一些所谓的“解决方法”,但是它们并不能解决此问题!,这些方案中包括例如下面这种常见的错误答案:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(...);

而正确的解决思路应该是:从VTK官网下载同样版本(本文中为VTK8.0.0)的VTK源码,并自己重新编译一遍完整的文件包,然后替换PCL提供的版本。我们开始。

2.1. 编译VTK

找一个地方新建一个文件夹,然后在里面创建文件夹VTK-src。将开始时准备好的两个VTK源码包(VTK-8.0.0.zip 和 VTKData-8.0.0.zip)里面的全部内容按下图的结构解压到里面。
在这里插入图片描述之后,回到上一层,新建两个文件夹:VTK-cmakeVTK-build。其中,cmake文件夹存储CMake生成的VS项目文件,build文件夹才真正存储稍后编译出来的VTK文件包。
在这里插入图片描述

然后,打开CMake(没错,又是它)。
选择源码路径为VTK-src文件夹,选择编译路径VTK-cmake文件夹。
然后与之前一样,勾选GroupedAdvanced的显示方式。
然后点击Configure,选择VS2015(版本号为14)以及x64平台。(如下图)

在这里插入图片描述
第一次Configure之后,会有一些条目是有问题(红色)的。此时,我们需要在列表中手动补充一些信息。

  • 勾选BUILD_EXAMPLES(输出VTK自带的样例项目,测试配置是否成功和学习VTK的写法都需要这些样例)和BUILD_SHARED_LIBS(编译VTK的dll文件,当然要勾上)。如果找不到的话,可以在列表上方的搜索框中搜索即可。
    在这里插入图片描述

  • 填写CMAKE_INSTALL_PREFIX为我们刚才创建的VTK-build文件夹。
    在这里插入图片描述

  • 勾选VTK_Group_Qt,这样才会编译出来VTK的Qt相关文件(QVTKWidget控件,以及相关的头文件、lib和dll)。
    在这里插入图片描述

  • 然后,将VTK_DATA_STORE选择到我们VTK-src里面的附加数据文件夹
    在这里插入图片描述

OK,暂时先设置这么多,这里重新点击一次Configure。剩余的设置项将在这次Configure之后出现。

Configure之后,又会出来一点点红色的设置项。设置VTK_QT_VERSION为5(因为我们安装的是Qt5);以及设置QT_QMAKE_EXECUTABLE为我们之前安装Qt的位置下面的qmake.exe路径(可以参考下图中我选择的位置去找你的qmake在哪里)。
在这里插入图片描述再次点击Configure,之后会再有新的设置项。
设置Qt5_DIR为我们安装Qt的位置下面lib/cmake里面的Qt5文件夹的路径,而不是Qt直接的安装路径!这里一定不能选错。见下图。
在这里插入图片描述再点击一次Configure。这次点击之后,虽然列表中还有红色项目,但是其实这些项目已经是填好的了。以及,下方的日志已经可以输出Configuring done
在这里插入图片描述此时就可以点击Generate咯。见到Generating done之后,就可以像上次一样点击Open Project按钮了。见下图。

在这里插入图片描述点击Open Project之后,会自动打开VS2015。这一次,我们需要编译两次,分别对应Debug和Release模式。先做Debug模式的操作,有两步:

  • 第一步:ALL_BUILD。这一步需要大约二十分钟
    在这里插入图片描述这一步运行完成后,正常的话是所有项目都成功的(爽!),如下图。
    在这里插入图片描述
  • 第二步:INSTALL。这一步很快,运行完成后,Debug版本的 VTK就放在了VTK-build文件夹里了。
    在这里插入图片描述在这里插入图片描述

OK,到这里为止,Debug版本的VTK库就编译完成了。由于一会儿Release版本的库也会输出到VTK-build文件夹下,因此我们把现在的VTK-build文件夹改名为VTK-build-Debug(不必重新新建VTK-build文件夹,一会儿编译Release版本时会自动建立)。
在这里插入图片描述
好,现在再做Release版本的操作。与刚才完全一样,只是把版本改为Release。直接上图:

  • 第一步:ALL_BUILD。与之前一样,需要等一段时间。
    在这里插入图片描述不出意外,再次全部成功。
    在这里插入图片描述
  • 第二步:INSTALL。
    在这里插入图片描述完成之后,这次我们将VTK-build文件夹改名为VTK-build-Release
    在这里插入图片描述

到这里,VTK的编译就完成了。我将我编译的版本上传到这里了,你可以根据需要直接下载,然后进行后面的步骤。不过我还是建议亲自编译一遍,因为可以通过编译是否通过来检查自己机器的环境是否配置正确。

2.2. 将VTK集成到PCL和Qt

现在,你已经拥有了完整编译的VTK包。下一步是用它替换PCL自带的版本。

  • 替换bin
    将编译好的Debug和Release版本文件包内的bin文件夹复制到PCL安装文件夹下的3rdParty\VTK\bin路径下,分别重命名为DebugRelease。如下图。
    在这里插入图片描述

  • 替换lib
    将编译好的Debug和Release版本文件包内的lib文件夹复制到PCL安装文件夹下的3rdParty\VTK\lib路径下,分别重命名为DebugRelease。如下图。
    在这里插入图片描述

  • 替换include
    为避免混淆,在做这一步之前,先删除PCL安装文件夹下3rdParty\VTK\include路径下的所有文件(如不放心,可以做一个备份,出问题了拷贝回来就好)。
    由于Debug与Release版本的头文件包相同,因此只需要拷贝其中任意一份就好。将编译好的Debug或者Release版本文件包内的include文件夹下面的vtk-8.0文件夹复制到PCL安装文件夹下的3rdParty\VTK\include路径下。如下图。
    在这里插入图片描述

  • 整合QVTKWidget到Qt
    将编译好的Release版本文件包内 \plugins\designer文件夹 内的QVTKWidgetPlugin.dll文件复制到Qt的插件文件夹(见下图路径)。
    在这里插入图片描述

到这里,绝大部分工作就已经结束了。下面需要重新检查一遍环境变量。
由于我们刚才改变了VTK的bin目录结构(拆分为了子目录Debug和Release,bin目录中已不直接存在dll文件),因此之前配置的path环境变量中,VTK的bin目录需要移除。相应地,我们添加Release版本的VTK bin目录到这里。(如下图)
在这里插入图片描述至此,所有配置都已经完成了。下一节是一个测试样例,如果你确定你已经配置好,到这里就可以结束了。

3. VTK官方样例调试 - qt_visualizer

最后,这一步使用VTK样例包中的Qt样例测试配置是否正确。

新开一个VS2015,使用Qt Tools的菜单打开Qt项目(.pro),如下图。
在这里插入图片描述要打开的项目默认安装路径位于C:\Program Files\PCL 1.8.1\share\doc\pcl-1.8\tutorials\sources\qt_visualizer,如下图。
在这里插入图片描述接下来需要配置项目属性(这也是使用PCL写VS项目最繁琐的一步):
在这里插入图片描述Debug与Release是两套配置,需要分别改一遍。
在这里插入图片描述

  • 调试/环境
    在这里插入图片描述
debug
PATH=$(QTDIR)\bin$(PATH)$(PCL_ROOT)\3rdParty\VTK\bin\debug
release
PATH=$(QTDIR)\bin$(PATH)$(PCL_ROOT)\3rdParty\VTK\bin\release 
  • C/C++ / 附加包含目录
    在这里插入图片描述
debug|release
.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;$(QTDIR)\include;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtCore;debug;$(QTDIR)\mkspecs\win32-msvc;$(PCL_ROOT)\include\pcl-1.8;$(PCL_ROOT)\include\pcl-1.8\pcl;$(PCL_ROOT)\3rdParty\Boost\include\boost-1_64;$(PCL_ROOT)\3rdParty\Eigen\eigen3;$(PCL_ROOT)\3rdParty\FLANN\include;$(PCL_ROOT)\3rdParty\OpenNI2\Include\Win32;$(PCL_ROOT)\3rdParty\Qhull\include;$(PCL_ROOT)\3rdParty\VTK\include\vtk-8.0;%(AdditionalIncludeDirectories) 
  • 链接器/常规/附加库目录
    在这里插入图片描述
debug
$(QTDIR)\lib;$(PCL_ROOT)\lib;$(PCL_ROOT)\3rdParty\FLANN\lib;$(PCL_ROOT)\3rdParty\Boost\lib;$(PCL_ROOT)\3rdParty\Qhull\lib;$(PCL_ROOT)\3rdParty\VTK\lib\debug;$(PCL_ROOT)\3rdParty\OpenNI2\Lib;%(AdditionalLibraryDirectories)
release
$(QTDIR)\lib;$(PCL_ROOT)\lib;$(PCL_ROOT)\3rdParty\FLANN\lib;$(PCL_ROOT)\3rdParty\Boost\lib;$(PCL_ROOT)\3rdParty\Qhull\lib;$(PCL_ROOT)\3rdParty\VTK\lib\release;$(PCL_ROOT)\3rdParty\OpenNI2\Lib;%(AdditionalLibraryDirectories) 
  • 链接器/输入/附加依赖项
    在这里插入图片描述
debug
qtmaind.lib
shell32.lib
Qt5Widgetsd.lib
Qt5Guid.lib
Qt5Cored.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_ply_debug.lib
pcl_io_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_ml_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_stereo_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
libboost_atomic-vc140-mt-gd-1_64.lib
libboost_bzip2-vc140-mt-gd-1_64.lib
libboost_chrono-vc140-mt-gd-1_64.lib
libboost_container-vc140-mt-gd-1_64.lib
libboost_context-vc140-mt-gd-1_64.lib
libboost_coroutine-vc140-mt-gd-1_64.lib
libboost_date_time-vc140-mt-gd-1_64.lib
libboost_exception-vc140-mt-gd-1_64.lib
libboost_fiber-vc140-mt-gd-1_64.lib
libboost_filesystem-vc140-mt-gd-1_64.lib
libboost_graph-vc140-mt-gd-1_64.lib
libboost_graph_parallel-vc140-mt-gd-1_64.lib
libboost_iostreams-vc140-mt-gd-1_64.lib
libboost_locale-vc140-mt-gd-1_64.lib
libboost_log-vc140-mt-gd-1_64.lib
libboost_log_setup-vc140-mt-gd-1_64.lib
libboost_math_c99-vc140-mt-gd-1_64.lib
libboost_math_c99f-vc140-mt-gd-1_64.lib
libboost_math_c99l-vc140-mt-gd-1_64.lib
libboost_math_tr1-vc140-mt-gd-1_64.lib
libboost_math_tr1f-vc140-mt-gd-1_64.lib
libboost_math_tr1l-vc140-mt-gd-1_64.lib
libboost_mpi-vc140-mt-gd-1_64.lib
libboost_numpy3-vc140-mt-gd-1_64.lib
libboost_numpy-vc140-mt-gd-1_64.lib
libboost_prg_exec_monitor-vc140-mt-gd-1_64.lib
libboost_program_options-vc140-mt-gd-1_64.lib
libboost_python3-vc140-mt-gd-1_64.lib
libboost_python-vc140-mt-gd-1_64.lib
libboost_random-vc140-mt-gd-1_64.lib
libboost_regex-vc140-mt-gd-1_64.lib
libboost_serialization-vc140-mt-gd-1_64.lib
libboost_signals-vc140-mt-gd-1_64.lib
libboost_system-vc140-mt-gd-1_64.lib
libboost_test_exec_monitor-vc140-mt-gd-1_64.lib
libboost_thread-vc140-mt-gd-1_64.lib
libboost_timer-vc140-mt-gd-1_64.lib
libboost_type_erasure-vc140-mt-gd-1_64.lib
libboost_unit_test_framework-vc140-mt-gd-1_64.lib
libboost_wave-vc140-mt-gd-1_64.lib
libboost_wserialization-vc140-mt-gd-1_64.lib
libboost_zlib-vc140-mt-gd-1_64.lib
flann-gd.lib
flann_cpp-gd.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
qhull_d.lib
qhullcpp_d.lib
qhullstatic_d.lib
qhullstatic_r_d.lib
qhull_p_d.lib
qhull_r_d.lib
vtkGUISupportQt-8.0.lib
vtkRenderingOpenGL2-8.0.lib
vtkglew-8.0.lib
vtkInteractionImage-8.0.lib
vtkInteractionWidgets-8.0.lib
vtkFiltersHybrid-8.0.lib
vtkFiltersModeling-8.0.lib
vtkImagingGeneral-8.0.lib
vtkImagingHybrid-8.0.lib
vtkRenderingAnnotation-8.0.lib
vtkRenderingFreeType-8.0.lib
vtkfreetype-8.0.lib
vtkRenderingVolume-8.0.lib
vtkIOXML-8.0.lib
vtkIOXMLParser-8.0.lib
vtkexpat-8.0.lib
vtkInteractionStyle-8.0.lib
vtkFiltersExtraction-8.0.lib
vtkFiltersStatistics-8.0.lib
vtkImagingFourier-8.0.lib
vtkalglib-8.0.lib
vtkImagingSources-8.0.lib
vtkIOImage-8.0.lib
vtkDICOMParser-8.0.lib
vtkmetaio-8.0.lib
vtkpng-8.0.lib
vtktiff-8.0.lib
vtkjpeg-8.0.lib
vtkImagingColor-8.0.lib
vtkImagingCore-8.0.lib
vtkRenderingCore-8.0.lib
vtkFiltersSources-8.0.lib
vtkFiltersGeneral-8.0.lib
vtkCommonComputationalGeometry-8.0.lib
vtkCommonColor-8.0.lib
vtkFiltersGeometry-8.0.lib
vtkFiltersCore-8.0.lib
vtkIOCore-8.0.lib
vtkCommonExecutionModel-8.0.lib
vtkCommonDataModel-8.0.lib
vtkCommonTransforms-8.0.lib
vtkCommonMisc-8.0.lib
vtkCommonMath-8.0.lib
vtkCommonSystem-8.0.lib
vtkCommonCore-8.0.lib
vtksys-8.0.lib


release
qtmain.lib
shell32.lib
Qt5Widgets.lib
Qt5Gui.lib
Qt5Core.lib
pcl_common_release.lib
pcl_features_release.lib
pcl_filters_release.lib
pcl_io_ply_release.lib
pcl_io_release.lib
pcl_kdtree_release.lib
pcl_keypoints_release.lib
pcl_ml_release.lib
pcl_octree_release.lib
pcl_outofcore_release.lib
pcl_people_release.lib
pcl_recognition_release.lib
pcl_registration_release.lib
pcl_sample_consensus_release.lib
pcl_search_release.lib
pcl_segmentation_release.lib
pcl_stereo_release.lib
pcl_surface_release.lib
pcl_tracking_release.lib
pcl_visualization_release.lib
libboost_atomic-vc140-mt-1_64.lib
libboost_bzip2-vc140-mt-1_64.lib
libboost_chrono-vc140-mt-1_64.lib
libboost_container-vc140-mt-1_64.lib
libboost_context-vc140-mt-1_64.lib
libboost_coroutine-vc140-mt-1_64.lib
libboost_date_time-vc140-mt-1_64.lib
libboost_exception-vc140-mt-1_64.lib
libboost_fiber-vc140-mt-1_64.lib
libboost_filesystem-vc140-mt-1_64.lib
libboost_graph-vc140-mt-1_64.lib
libboost_graph_parallel-vc140-mt-1_64.lib
libboost_iostreams-vc140-mt-1_64.lib
libboost_locale-vc140-mt-1_64.lib
libboost_log-vc140-mt-1_64.lib
libboost_log_setup-vc140-mt-1_64.lib
libboost_math_c99-vc140-mt-1_64.lib
libboost_math_c99f-vc140-mt-1_64.lib
libboost_math_c99l-vc140-mt-1_64.lib
libboost_math_tr1-vc140-mt-1_64.lib
libboost_math_tr1f-vc140-mt-1_64.lib
libboost_math_tr1l-vc140-mt-1_64.lib
libboost_mpi-vc140-mt-1_64.lib
libboost_numpy3-vc140-mt-1_64.lib
libboost_numpy-vc140-mt-1_64.lib
libboost_prg_exec_monitor-vc140-mt-1_64.lib
libboost_program_options-vc140-mt-1_64.lib
libboost_python3-vc140-mt-1_64.lib
libboost_python-vc140-mt-1_64.lib
libboost_random-vc140-mt-1_64.lib
libboost_regex-vc140-mt-1_64.lib
libboost_serialization-vc140-mt-1_64.lib
libboost_signals-vc140-mt-1_64.lib
libboost_system-vc140-mt-1_64.lib
libboost_test_exec_monitor-vc140-mt-1_64.lib
libboost_thread-vc140-mt-1_64.lib
libboost_timer-vc140-mt-1_64.lib
libboost_type_erasure-vc140-mt-1_64.lib
libboost_unit_test_framework-vc140-mt-1_64.lib
libboost_wave-vc140-mt-1_64.lib
libboost_wserialization-vc140-mt-1_64.lib
libboost_zlib-vc140-mt-1_64.lib
flann.lib
flann_cpp.lib
flann_cpp_s.lib
flann_s.lib
qhull_d.lib
qhullcpp_d.lib
qhullstatic_d.lib
qhullstatic_r_d.lib
qhull_p_d.lib
qhull_r_d.lib
vtkGUISupportQt-8.0.lib
vtkRenderingOpenGL2-8.0.lib
vtkglew-8.0.lib
vtkInteractionImage-8.0.lib
vtkInteractionWidgets-8.0.lib
vtkFiltersHybrid-8.0.lib
vtkFiltersModeling-8.0.lib
vtkImagingGeneral-8.0.lib
vtkImagingHybrid-8.0.lib
vtkRenderingAnnotation-8.0.lib
vtkRenderingFreeType-8.0.lib
vtkfreetype-8.0.lib
vtkRenderingVolume-8.0.lib
vtkIOXML-8.0.lib
vtkIOXMLParser-8.0.lib
vtkexpat-8.0.lib
vtkInteractionStyle-8.0.lib
vtkFiltersExtraction-8.0.lib
vtkFiltersStatistics-8.0.lib
vtkImagingFourier-8.0.lib
vtkalglib-8.0.lib
vtkImagingSources-8.0.lib
vtkIOImage-8.0.lib
vtkDICOMParser-8.0.lib
vtkmetaio-8.0.lib
vtkpng-8.0.lib
vtktiff-8.0.lib
vtkjpeg-8.0.lib
vtkImagingColor-8.0.lib
vtkImagingCore-8.0.lib
vtkRenderingCore-8.0.lib
vtkFiltersSources-8.0.lib
vtkFiltersGeneral-8.0.lib
vtkCommonComputationalGeometry-8.0.lib
vtkCommonColor-8.0.lib
vtkFiltersGeometry-8.0.lib
vtkFiltersCore-8.0.lib
vtkIOCore-8.0.lib
vtkCommonExecutionModel-8.0.lib
vtkCommonDataModel-8.0.lib
vtkCommonTransforms-8.0.lib
vtkCommonMisc-8.0.lib
vtkCommonMath-8.0.lib
vtkCommonSystem-8.0.lib
vtkCommonCore-8.0.lib
vtksys-8.0.lib
  • 最后, 在pclviewer.h中添加如下代码
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle); 

在这里插入图片描述

  • 以及,修改pclviewer.h的第二行的引用路径为
#include "ui_pclviewer.h"

在这里插入图片描述
之后点击运行,见到下图的运行效果就算配置成功。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Gypsop/article/details/121541791