最近在编译一个项目,scan3d-caputure,配置它需要调用一些第三方库,如Opencv,VTK,QT,还需要用到一个非常强大的软件cmake(一个跨平台编译器),整个过程用了我三到四天的时间,差点给我整奔溃了,所以在此记录一下遇到的一些问题,以免之后忘记。
一、Cmake
⑴cmake的下载与安装都不难,去网站下载就行,不过要看清它的版本。
⑵cmakelist是一个项目组建的核心,必须逐渐了解它每句代码的含义,以及怎么去写一个工程的cmakelist,如最基本的:
①CMAKE_MINIMUM_REQUIRED(VERSION 2.6) #所需cmake的最低版本 ;② PROJECT(HELLO) #项目名称 ;③要注意cmakelist里面的path,需要改成自己安装包对应的路径;……
⑶cmake界面有这么几个注意的地方:
①"where is the source code:" 此处放源码的路径;
②"where to build the binaries" 此处放生成项目的路径;
③"Search"用来查找文件的位置,注意有部分文件会重名,这时候自动检测到的路径可能会有问题,如果configure的时候报某一个文件出错,可以search一下看看路径是不是错了,或者是能不能找到该文件的位置,如果找不到的话,需要后面的一个按钮"Add Entry"来手动添加路径;
④"configure"是用来配置源码,"Generate"是用来生成文件的,"Open Project"用来打开所生成的文件
二、QT的安装与编译
⑴QT装安装版就行,装完把环境变量添加进去,并且重启
⑵注意在选择组件时,可以将俩个组件都勾选
三、 VTK的安装与编译
⑴ VTK全称是Visualization Toolkit,即可视化工具包。它是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。VTK主要用于三维计算机图形学、图像处理和可视化。VTK是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,TCL/TK和Python各种语言使用VTK。通过VTK将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。
⑵ 基本环境:
①Windows系统 Win10 64位
②VS2019
③QT5.14.2
④cmake-3.19.2-win64-x64
⑤VTK8.2.0
⑶ 编译过程:
VTK的下载很简单,直接去官网下载源码(一个压缩包解压后就可以得到),繁琐的是编译的过程。打开cmake,将下载好的vtk源码放在source code,相应的创建一个空目录用来放生成的目录,然后开始编译,调bug。
具体步骤参考该文章:VTK的编译安装教程
四、PCL的安装与编译
PCL全称为Point Cloud Library,是一个用于三维点云处理的开源库。它包含了从传感器或三维数据文件中检索三维点云的各种处理。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,且PCL是BSD授权方式,可以免费进行商业和学术应用,可在Windows、Linux、Mac OS X等操作系统中运行。
PCL的下载很简单,关键也是编译过程,可参考以下俩篇文章:
1、win10+vs2019+pcl1.11.0安装教程
2、工程环境配置 使用QT+PCL点云可视化 QT5.7.1 + VTK8.2.0 + PCL1.11.0 + VS2019 + OpenCV4.3.0 +Cmake3.18.0
附录:
1、PCL lib 文件名列表
debuge:
pcl_commond.lib
pcl_featuresd.lib
pcl_filtersd.lib
pcl_iod.lib
pcl_io_plyd.lib
pcl_kdtreed.lib
pcl_keypointsd.lib
pcl_mld.lib
pcl_octreed.lib
pcl_outofcored.lib
pcl_peopled.lib
pcl_recognitiond.lib
pcl_registrationd.lib
pcl_sample_consensusd.lib
pcl_searchd.lib
pcl_segmentationd.lib
pcl_stereod.lib
pcl_surfaced.lib
pcl_trackingd.lib
pcl_visualizationd.lib
pcl_commond.lib
pcl_featuresd.lib
pcl_filtersd.lib
pcl_iod.lib
pcl_io_plyd.lib
pcl_kdtreed.lib
pcl_keypointsd.lib
pcl_mld.lib
pcl_octreed.lib
pcl_outofcored.lib
pcl_peopled.lib
pcl_recognitiond.lib
pcl_registrationd.lib
pcl_sample_consensusd.lib
pcl_searchd.lib
pcl_segmentationd.lib
pcl_stereod.lib
pcl_surfaced.lib
pcl_trackingd.lib
pcl_visualizationd.lib
libboost_atomic-vc142-mt-gd-x64-1_73.lib
libboost_bzip2-vc142-mt-gd-x64-1_73.lib
libboost_chrono-vc142-mt-gd-x64-1_73.lib
libboost_container-vc142-mt-gd-x64-1_73.lib
libboost_context-vc142-mt-gd-x64-1_73.lib
libboost_contract-vc142-mt-gd-x64-1_73.lib
libboost_coroutine-vc142-mt-gd-x64-1_73.lib
libboost_date_time-vc142-mt-gd-x64-1_73.lib
libboost_exception-vc142-mt-gd-x64-1_73.lib
libboost_fiber-vc142-mt-gd-x64-1_73.lib
libboost_filesystem-vc142-mt-gd-x64-1_73.lib
libboost_graph-vc142-mt-gd-x64-1_73.lib
libboost_graph_parallel-vc142-mt-gd-x64-1_73.lib
libboost_iostreams-vc142-mt-gd-x64-1_73.lib
libboost_locale-vc142-mt-gd-x64-1_73.lib
libboost_log-vc142-mt-gd-x64-1_73.lib
libboost_log_setup-vc142-mt-gd-x64-1_73.lib
libboost_math_c99-vc142-mt-gd-x64-1_73.lib
libboost_math_c99f-vc142-mt-gd-x64-1_73.lib
libboost_math_c99l-vc142-mt-gd-x64-1_73.lib
libboost_math_tr1-vc142-mt-gd-x64-1_73.lib
libboost_math_tr1f-vc142-mt-gd-x64-1_73.lib
libboost_math_tr1l-vc142-mt-gd-x64-1_73.lib
libboost_mpi-vc142-mt-gd-x64-1_73.lib
libboost_nowide-vc142-mt-gd-x64-1_73.lib
libboost_numpy38-vc142-mt-gd-x64-1_73.lib
libboost_prg_exec_monitor-vc142-mt-gd-x64-1_73.lib
libboost_program_options-vc142-mt-gd-x64-1_73.lib
libboost_python38-vc142-mt-gd-x64-1_73.lib
libboost_random-vc142-mt-gd-x64-1_73.lib
libboost_regex-vc142-mt-gd-x64-1_73.lib
libboost_serialization-vc142-mt-gd-x64-1_73.lib
libboost_stacktrace_noop-vc142-mt-gd-x64-1_73.lib
libboost_stacktrace_windbg-vc142-mt-gd-x64-1_73.lib
libboost_stacktrace_windbg_cached-vc142-mt-gd-x64-1_73.lib
libboost_system-vc142-mt-gd-x64-1_73.lib
libboost_test_exec_monitor-vc142-mt-gd-x64-1_73.lib
libboost_thread-vc142-mt-gd-x64-1_73.lib
libboost_timer-vc142-mt-gd-x64-1_73.lib
libboost_type_erasure-vc142-mt-gd-x64-1_73.lib
libboost_unit_test_framework-vc142-mt-gd-x64-1_73.lib
libboost_wave-vc142-mt-gd-x64-1_73.lib
libboost_wserialization-vc142-mt-gd-x64-1_73.lib
libboost_zlib-vc142-mt-gd-x64-1_73.lib
libboost_atomic-vc142-mt-gd-x64-1_73.lib
libboost_bzip2-vc142-mt-gd-x64-1_73.lib
libboost_chrono-vc142-mt-gd-x64-1_73.lib
libboost_container-vc142-mt-gd-x64-1_73.lib
libboost_context-vc142-mt-gd-x64-1_73.lib
libboost_contract-vc142-mt-gd-x64-1_73.lib
libboost_coroutine-vc142-mt-gd-x64-1_73.lib
libboost_date_time-vc142-mt-gd-x64-1_73.lib
libboost_exception-vc142-mt-gd-x64-1_73.lib
libboost_fiber-vc142-mt-gd-x64-1_73.lib
libboost_filesystem-vc142-mt-gd-x64-1_73.lib
libboost_graph-vc142-mt-gd-x64-1_73.lib
libboost_graph_parallel-vc142-mt-gd-x64-1_73.lib
libboost_iostreams-vc142-mt-gd-x64-1_73.lib
libboost_locale-vc142-mt-gd-x64-1_73.lib
libboost_log-vc142-mt-gd-x64-1_73.lib
libboost_log_setup-vc142-mt-gd-x64-1_73.lib
libboost_math_c99-vc142-mt-gd-x64-1_73.lib
libboost_math_c99f-vc142-mt-gd-x64-1_73.lib
libboost_math_c99l-vc142-mt-gd-x64-1_73.lib
libboost_math_tr1-vc142-mt-gd-x64-1_73.lib
libboost_math_tr1f-vc142-mt-gd-x64-1_73.lib
libboost_math_tr1l-vc142-mt-gd-x64-1_73.lib
libboost_mpi-vc142-mt-gd-x64-1_73.lib
libboost_nowide-vc142-mt-gd-x64-1_73.lib
libboost_numpy38-vc142-mt-gd-x64-1_73.lib
libboost_prg_exec_monitor-vc142-mt-gd-x64-1_73.lib
libboost_program_options-vc142-mt-gd-x64-1_73.lib
libboost_python38-vc142-mt-gd-x64-1_73.lib
libboost_random-vc142-mt-gd-x64-1_73.lib
libboost_regex-vc142-mt-gd-x64-1_73.lib
libboost_serialization-vc142-mt-gd-x64-1_73.lib
libboost_stacktrace_noop-vc142-mt-gd-x64-1_73.lib
libboost_stacktrace_windbg-vc142-mt-gd-x64-1_73.lib
libboost_stacktrace_windbg_cached-vc142-mt-gd-x64-1_73.lib
libboost_system-vc142-mt-gd-x64-1_73.lib
libboost_test_exec_monitor-vc142-mt-gd-x64-1_73.lib
libboost_thread-vc142-mt-gd-x64-1_73.lib
libboost_timer-vc142-mt-gd-x64-1_73.lib
libboost_type_erasure-vc142-mt-gd-x64-1_73.lib
libboost_unit_test_framework-vc142-mt-gd-x64-1_73.lib
libboost_wave-vc142-mt-gd-x64-1_73.lib
libboost_wserialization-vc142-mt-gd-x64-1_73.lib
libboost_zlib-vc142-mt-gd-x64-1_73.lib
OpenNI2.lib
release:
pcl_common.lib
pcl_features.lib
pcl_filters.lib
pcl_io.lib
pcl_io_ply.lib
pcl_kdtree.lib
pcl_keypoints.lib
pcl_ml.lib
pcl_octree.lib
pcl_outofcore.lib
pcl_people.lib
pcl_recognition.lib
pcl_registration.lib
pcl_sample_consensus.lib
pcl_search.lib
pcl_segmentation.lib
pcl_stereo.lib
pcl_surface.lib
pcl_tracking.lib
pcl_visualization.lib
pcl_common.lib
pcl_features.lib
pcl_filters.lib
pcl_io.lib
pcl_io_ply.lib
pcl_kdtree.lib
pcl_keypoints.lib
pcl_ml.lib
pcl_octree.lib
pcl_outofcore.lib
pcl_people.lib
pcl_recognition.lib
pcl_registration.lib
pcl_sample_consensus.lib
pcl_search.lib
pcl_segmentation.lib
pcl_stereo.lib
pcl_surface.lib
pcl_tracking.lib
pcl_visualization.lib
libboost_atomic-vc142-mt-x64-1_73.lib
libboost_bzip2-vc142-mt-x64-1_73.lib
libboost_chrono-vc142-mt-x64-1_73.lib
libboost_container-vc142-mt-x64-1_73.lib
libboost_context-vc142-mt-x64-1_73.lib
libboost_contract-vc142-mt-x64-1_73.lib
libboost_coroutine-vc142-mt-x64-1_73.lib
libboost_date_time-vc142-mt-x64-1_73.lib
libboost_exception-vc142-mt-x64-1_73.lib
libboost_fiber-vc142-mt-x64-1_73.lib
libboost_filesystem-vc142-mt-x64-1_73.lib
libboost_graph-vc142-mt-x64-1_73.lib
libboost_graph_parallel-vc142-mt-x64-1_73.lib
libboost_iostreams-vc142-mt-x64-1_73.lib
libboost_locale-vc142-mt-x64-1_73.lib
libboost_log-vc142-mt-x64-1_73.lib
libboost_log_setup-vc142-mt-x64-1_73.lib
libboost_math_c99-vc142-mt-x64-1_73.lib
libboost_math_c99f-vc142-mt-x64-1_73.lib
libboost_math_c99l-vc142-mt-x64-1_73.lib
libboost_math_tr1-vc142-mt-x64-1_73.lib
libboost_math_tr1f-vc142-mt-x64-1_73.lib
libboost_math_tr1l-vc142-mt-x64-1_73.lib
libboost_mpi-vc142-mt-x64-1_73.lib
libboost_nowide-vc142-mt-x64-1_73.lib
libboost_numpy38-vc142-mt-x64-1_73.lib
libboost_prg_exec_monitor-vc142-mt-x64-1_73.lib
libboost_program_options-vc142-mt-x64-1_73.lib
libboost_python38-vc142-mt-x64-1_73.lib
libboost_random-vc142-mt-x64-1_73.lib
libboost_regex-vc142-mt-x64-1_73.lib
libboost_serialization-vc142-mt-x64-1_73.lib
libboost_stacktrace_noop-vc142-mt-x64-1_73.lib
libboost_stacktrace_windbg-vc142-mt-x64-1_73.lib
libboost_stacktrace_windbg_cached-vc142-mt-x64-1_73.lib
libboost_system-vc142-mt-x64-1_73.lib
libboost_test_exec_monitor-vc142-mt-x64-1_73.lib
libboost_thread-vc142-mt-x64-1_73.lib
libboost_timer-vc142-mt-x64-1_73.lib
libboost_type_erasure-vc142-mt-x64-1_73.lib
libboost_unit_test_framework-vc142-mt-x64-1_73.lib
libboost_wave-vc142-mt-x64-1_73.lib
libboost_wserialization-vc142-mt-x64-1_73.lib
libboost_zlib-vc142-mt-x64-1_73.lib
libboost_atomic-vc142-mt-x64-1_73.lib
libboost_bzip2-vc142-mt-x64-1_73.lib
libboost_chrono-vc142-mt-x64-1_73.lib
libboost_container-vc142-mt-x64-1_73.lib
libboost_context-vc142-mt-x64-1_73.lib
libboost_contract-vc142-mt-x64-1_73.lib
libboost_coroutine-vc142-mt-x64-1_73.lib
libboost_date_time-vc142-mt-x64-1_73.lib
libboost_exception-vc142-mt-x64-1_73.lib
libboost_fiber-vc142-mt-x64-1_73.lib
libboost_filesystem-vc142-mt-x64-1_73.lib
libboost_graph-vc142-mt-x64-1_73.lib
libboost_graph_parallel-vc142-mt-x64-1_73.lib
libboost_iostreams-vc142-mt-x64-1_73.lib
libboost_locale-vc142-mt-x64-1_73.lib
libboost_log-vc142-mt-x64-1_73.lib
libboost_log_setup-vc142-mt-x64-1_73.lib
libboost_math_c99-vc142-mt-x64-1_73.lib
libboost_math_c99f-vc142-mt-x64-1_73.lib
libboost_math_c99l-vc142-mt-x64-1_73.lib
libboost_math_tr1-vc142-mt-x64-1_73.lib
libboost_math_tr1f-vc142-mt-x64-1_73.lib
libboost_math_tr1l-vc142-mt-x64-1_73.lib
libboost_mpi-vc142-mt-x64-1_73.lib
libboost_nowide-vc142-mt-x64-1_73.lib
libboost_numpy38-vc142-mt-x64-1_73.lib
libboost_prg_exec_monitor-vc142-mt-x64-1_73.lib
libboost_program_options-vc142-mt-x64-1_73.lib
libboost_python38-vc142-mt-x64-1_73.lib
libboost_random-vc142-mt-x64-1_73.lib
libboost_regex-vc142-mt-x64-1_73.lib
libboost_serialization-vc142-mt-x64-1_73.lib
libboost_stacktrace_noop-vc142-mt-x64-1_73.lib
libboost_stacktrace_windbg-vc142-mt-x64-1_73.lib
libboost_stacktrace_windbg_cached-vc142-mt-x64-1_73.lib
libboost_system-vc142-mt-x64-1_73.lib
libboost_test_exec_monitor-vc142-mt-x64-1_73.lib
libboost_thread-vc142-mt-x64-1_73.lib
libboost_timer-vc142-mt-x64-1_73.lib
libboost_type_erasure-vc142-mt-x64-1_73.lib
libboost_unit_test_framework-vc142-mt-x64-1_73.lib
libboost_wave-vc142-mt-x64-1_73.lib
libboost_wserialization-vc142-mt-x64-1_73.lib
libboost_zlib-vc142-mt-x64-1_73.lib
OpenNI2.lib
2、可能遇到的一些错误(我遇到的):
⑴、cmake找不到Qt5WebKitWidgets → 在search里面搜QT,把 QT web 的选项 取消。
⑵、vs2019里面报错MSB804此项目需要MFC库 → 暂时这么做:在 cmake 里面 搜 MFC, 把 GUISupportMFC 取消
⑶、VS2019里面报错,无法打开PCL的一些库 →因为我是在运行scan3d-capture这个项目时报的错,无法调用pcl的库,所以首先要检查一下该项目下的cmakelist中是不是有部分pcl的路径没有改成本机的路径( 如该代码“${PCL_Root_Path}”需要改为本机的真实路径),然后呢,就是要检查一下环境变量,是不是把pcl需要的路径都添加进去了。
⑷、无法解析外部符号 → 该问题一般是由于附加依赖项导致的,右键 scan3d-capture -》属性 --》链接器-》输入-》附加依赖项, 原有的附加依赖项不变动,将我附录一里面的附加依赖项添加进去(注意debug模式下编译只需添加debug的附加依赖项,release模式对应的release的附加依赖项,还需注意的是每次重新cmake后,附加依赖项都会重置为系统默认,此时需要再进行确认修改)
⑸、项目编译成功后,但运行又出错了,由于找不到vtkGUISupportQT-8.2.dll,无法继续执行代码。 → 可从以下几个方面着手解决:①在vtk的cmake里面搜QT,检查一下qt的路径是否有错;②在vtk工程里面找报错提示的找不到的项目,在该项目上右键生成;③用Everything软件搜一下该dll文件在哪个目录下,将该目录添加进系统的环境变量里边。
⑹、无法定位程序输入点…与动态链接库…dll上 →可能是没有加载最新的dll导致,需要删除旧的动态链接库。可以这么操作:将release和debug下组成的文件全部删除,重新编译一下,还需要注意,如果实在debug模式下编译,那么需要将系统的环境变量里面debug那个路径上移到release模式上面。
⑺、运行是又报错,找不到某一个包的位置,“This application failed to start because it could not find or load the Qt plaform plugin windows in” → 还是环境变量的问题,将环境变量添加进去后注销或者重启电脑以生效。