首页/文章列表/文章详情

踩坑记录:windows11下使用 VS2022 和 PCL1.14.1 配置点云开发环境

编程知识3172024-07-22评论

闲话不多说,具体在windows下下载PCL与解压pcl可以看https://www.yuque.com/huangzhongqing/pcl/这位大佬的文章,那我就具体说一下踩过点坑:

踩坑点1:

按照大佬的文章的步骤进行解压与下载,我的PCL环境下在了K盘中,但是最后不知怎么的我的openni2文件夹下在了C盘里,也就是说3rdparty文件夹下的openni2没有下一层目录了,我的做法就是把c盘里openni2目录下的文件都复制到了K盘中。当然也可以不复制,在配置环境变量时记得要写c盘的openni2不要写K盘的就可以。

踩坑点2:

安装PCL时,如果选择添加环境变量可能会出现“环境变量长度超过1023”这样类似的错误,这时候需要手动配置一下,下面是我的配置办法:


在这张图中,这三个变量应该是安装的时候可以自动写到环境变量里的,第三行是我手动修改了,放到了k盘里,其实可以不放,只要记得是C盘就行,前两行也同样。还有就是下图这个

也是可以自动填写上的,需要我们手动添加的是下面这些:


我们在Path里,尾部加上这些就可以了。

踩坑点3:

链接库问题,这也是比较棘手的问题之一,在3rdparty下的每一个文件夹下的lib文件夹中,新建一个txt文件,内容填写:DIR *.lib /B >liblist.txt DIR .lib /B:列出当前目录中所有以 .lib 为扩展名的文件,且使用简洁的输出格式。DIR:显示目录中的文件和子目录列表。*.lib:匹配所有以 .lib 结尾的文件。/B:使用简洁格式输出,只显示文件名,不显示日期、时间、文件大小等详细信息。liblist.txt是你需要重定向的文件名。最后再把写入命令的txt后缀修改为bat,双击执行即可吧lib文件名称全部写入到liblist.txt中。完成上述操作后,当我们执行时,可能会出现下图的错误:

这个错误的排除也是耗费了我很长时间,最后找到了原因:上面我们得到的liblist列表中,同时包括debug和release版本的lib,那么vs执行的时候就会产生冲突,从而报错,具体做法是我们可以去掉非debug版本的lib文件,比如你把“pcl_registrationd.lib”和 “pcl_registration.lib” 都写上去了那么就去掉后面不带d的,前面有“gd”后缀的一样,保留它,去掉不带gd的。下面是1.14.1我整理好的库:

libboost_atomic-vc143-mt-gd-x64-1_84.liblibboost_bzip2-vc143-mt-gd-x64-1_84.liblibboost_chrono-vc143-mt-gd-x64-1_84.liblibboost_container-vc143-mt-gd-x64-1_84.liblibboost_context-vc143-mt-gd-x64-1_84.liblibboost_contract-vc143-mt-gd-x64-1_84.liblibboost_coroutine-vc143-mt-gd-x64-1_84.liblibboost_date_time-vc143-mt-gd-x64-1_84.liblibboost_exception-vc143-mt-gd-x64-1_84.liblibboost_fiber-vc143-mt-gd-x64-1_84.liblibboost_filesystem-vc143-mt-gd-x64-1_84.liblibboost_graph-vc143-mt-gd-x64-1_84.liblibboost_graph_parallel-vc143-mt-gd-x64-1_84.liblibboost_iostreams-vc143-mt-gd-x64-1_84.liblibboost_json-vc143-mt-gd-x64-1_84.liblibboost_locale-vc143-mt-gd-x64-1_84.liblibboost_log-vc143-mt-gd-x64-1_84.liblibboost_log_setup-vc143-mt-gd-x64-1_84.liblibboost_math_c99-vc143-mt-gd-x64-1_84.liblibboost_math_c99f-vc143-mt-gd-x64-1_84.liblibboost_math_c99l-vc143-mt-gd-x64-1_84.liblibboost_math_tr1-vc143-mt-gd-x64-1_84.liblibboost_math_tr1f-vc143-mt-gd-x64-1_84.liblibboost_math_tr1l-vc143-mt-gd-x64-1_84.liblibboost_mpi-vc143-mt-gd-x64-1_84.liblibboost_nowide-vc143-mt-gd-x64-1_84.liblibboost_numpy310-vc143-mt-gd-x64-1_84.liblibboost_prg_exec_monitor-vc143-mt-gd-x64-1_84.liblibboost_program_options-vc143-mt-gd-x64-1_84.liblibboost_python310-vc143-mt-gd-x64-1_84.liblibboost_random-vc143-mt-gd-x64-1_84.liblibboost_regex-vc143-mt-gd-x64-1_84.liblibboost_serialization-vc143-mt-gd-x64-1_84.liblibboost_stacktrace_noop-vc143-mt-gd-x64-1_84.liblibboost_stacktrace_windbg-vc143-mt-gd-x64-1_84.liblibboost_stacktrace_windbg_cached-vc143-mt-gd-x64-1_84.liblibboost_system-vc143-mt-gd-x64-1_84.liblibboost_test_exec_monitor-vc143-mt-gd-x64-1_84.liblibboost_thread-vc143-mt-gd-x64-1_84.liblibboost_timer-vc143-mt-gd-x64-1_84.liblibboost_type_erasure-vc143-mt-gd-x64-1_84.liblibboost_unit_test_framework-vc143-mt-gd-x64-1_84.liblibboost_url-vc143-mt-gd-x64-1_84.liblibboost_wave-vc143-mt-gd-x64-1_84.liblibboost_wserialization-vc143-mt-gd-x64-1_84.liblibboost_zlib-vc143-mt-gd-x64-1_84.libflann-gd.libflann_cpp-gd.libflann_cpp_s-gd.libflann_s-gd.libqhullcpp.libqhullcpp_d.libqhullstatic.libqhullstatic_d.libqhullstatic_rd.libqhull_rd.libvtkcgns-9.3-gd.libvtkChartsCore-9.3-gd.libvtkCommonColor-9.3-gd.libvtkCommonComputationalGeometry-9.3-gd.libvtkCommonCore-9.3-gd.libvtkCommonDataModel-9.3-gd.libvtkCommonExecutionModel-9.3-gd.libvtkCommonMath-9.3-gd.libvtkCommonMisc-9.3-gd.libvtkCommonSystem-9.3-gd.libvtkCommonTransforms-9.3-gd.libvtkDICOMParser-9.3-gd.libvtkDomainsChemistry-9.3-gd.libvtkDomainsChemistryOpenGL2-9.3-gd.libvtkdoubleconversion-9.3-gd.libvtkexodusII-9.3-gd.libvtkexpat-9.3-gd.libvtkFiltersAMR-9.3-gd.libvtkFiltersCellGrid-9.3-gd.libvtkFiltersCore-9.3-gd.libvtkFiltersExtraction-9.3-gd.libvtkFiltersFlowPaths-9.3-gd.libvtkFiltersGeneral-9.3-gd.libvtkFiltersGeneric-9.3-gd.libvtkFiltersGeometry-9.3-gd.libvtkFiltersGeometryPreview-9.3-gd.libvtkFiltersHybrid-9.3-gd.libvtkFiltersHyperTree-9.3-gd.libvtkFiltersImaging-9.3-gd.libvtkFiltersModeling-9.3-gd.libvtkFiltersParallel-9.3-gd.libvtkFiltersParallelImaging-9.3-gd.libvtkFiltersPoints-9.3-gd.libvtkFiltersProgrammable-9.3-gd.libvtkFiltersReduction-9.3-gd.libvtkFiltersSelection-9.3-gd.libvtkFiltersSMP-9.3-gd.libvtkFiltersSources-9.3-gd.libvtkFiltersStatistics-9.3-gd.libvtkFiltersTensor-9.3-gd.libvtkFiltersTexture-9.3-gd.libvtkFiltersTopology-9.3-gd.libvtkFiltersVerdict-9.3-gd.libvtkfmt-9.3-gd.libvtkfreetype-9.3-gd.libvtkGeovisCore-9.3-gd.libvtkgl2ps-9.3-gd.libvtkglew-9.3-gd.libvtkhdf5-9.3-gd.libvtkhdf5_hl-9.3-gd.libvtkImagingColor-9.3-gd.libvtkImagingCore-9.3-gd.libvtkImagingFourier-9.3-gd.libvtkImagingGeneral-9.3-gd.libvtkImagingHybrid-9.3-gd.libvtkImagingMath-9.3-gd.libvtkImagingMorphological-9.3-gd.libvtkImagingSources-9.3-gd.libvtkImagingStatistics-9.3-gd.libvtkImagingStencil-9.3-gd.libvtkInfovisCore-9.3-gd.libvtkInfovisLayout-9.3-gd.libvtkInteractionImage-9.3-gd.libvtkInteractionStyle-9.3-gd.libvtkInteractionWidgets-9.3-gd.libvtkIOAMR-9.3-gd.libvtkIOAsynchronous-9.3-gd.libvtkIOCellGrid-9.3-gd.libvtkIOCesium3DTiles-9.3-gd.libvtkIOCGNSReader-9.3-gd.libvtkIOChemistry-9.3-gd.libvtkIOCityGML-9.3-gd.libvtkIOCONVERGECFD-9.3-gd.libvtkIOCore-9.3-gd.libvtkIOEnSight-9.3-gd.libvtkIOExodus-9.3-gd.libvtkIOExport-9.3-gd.libvtkIOExportGL2PS-9.3-gd.libvtkIOExportPDF-9.3-gd.libvtkIOFLUENTCFF-9.3-gd.libvtkIOGeometry-9.3-gd.libvtkIOHDF-9.3-gd.libvtkIOImage-9.3-gd.libvtkIOImport-9.3-gd.libvtkIOInfovis-9.3-gd.libvtkIOIOSS-9.3-gd.libvtkIOLegacy-9.3-gd.libvtkIOLSDyna-9.3-gd.libvtkIOMINC-9.3-gd.libvtkIOMotionFX-9.3-gd.libvtkIOMovie-9.3-gd.libvtkIONetCDF-9.3-gd.libvtkIOOggTheora-9.3-gd.libvtkIOParallel-9.3-gd.libvtkIOParallelXML-9.3-gd.libvtkIOPLY-9.3-gd.libvtkIOSegY-9.3-gd.libvtkIOSQL-9.3-gd.libvtkioss-9.3-gd.libvtkIOTecplotTable-9.3-gd.libvtkIOVeraOut-9.3-gd.libvtkIOVideo-9.3-gd.libvtkIOXML-9.3-gd.libvtkIOXMLParser-9.3-gd.libvtkjpeg-9.3-gd.libvtkjsoncpp-9.3-gd.libvtkkissfft-9.3-gd.libvtklibharu-9.3-gd.libvtklibproj-9.3-gd.libvtklibxml2-9.3-gd.libvtkloguru-9.3-gd.libvtklz4-9.3-gd.libvtklzma-9.3-gd.libvtkmetaio-9.3-gd.libvtknetcdf-9.3-gd.libvtkogg-9.3-gd.libvtkParallelCore-9.3-gd.libvtkParallelDIY-9.3-gd.libvtkpng-9.3-gd.libvtkpugixml-9.3-gd.libvtkRenderingAnnotation-9.3-gd.libvtkRenderingCellGrid-9.3-gd.libvtkRenderingContext2D-9.3-gd.libvtkRenderingContextOpenGL2-9.3-gd.libvtkRenderingCore-9.3-gd.libvtkRenderingFreeType-9.3-gd.libvtkRenderingGL2PSOpenGL2-9.3-gd.libvtkRenderingHyperTreeGrid-9.3-gd.libvtkRenderingImage-9.3-gd.libvtkRenderingLabel-9.3-gd.libvtkRenderingLICOpenGL2-9.3-gd.libvtkRenderingLOD-9.3-gd.libvtkRenderingOpenGL2-9.3-gd.libvtkRenderingSceneGraph-9.3-gd.libvtkRenderingUI-9.3-gd.libvtkRenderingVolume-9.3-gd.libvtkRenderingVolumeOpenGL2-9.3-gd.libvtkRenderingVtkJS-9.3-gd.libvtksqlite-9.3-gd.libvtksys-9.3-gd.libvtkTestingRendering-9.3-gd.libvtktheora-9.3-gd.libvtktiff-9.3-gd.libvtkverdict-9.3-gd.libvtkViewsContext2D-9.3-gd.libvtkViewsCore-9.3-gd.libvtkViewsInfovis-9.3-gd.libvtkWrappingTools-9.3-gd.libvtkzlib-9.3-gd.libpcl_commond.libpcl_featuresd.libpcl_filtersd.libpcl_iod.libpcl_io_plyd.libpcl_kdtreed.libpcl_keypointsd.libpcl_mld.libpcl_octreed.libpcl_outofcored.libpcl_peopled.libpcl_recognitiond.libpcl_registrationd.libpcl_sample_consensusd.libpcl_searchd.libpcl_segmentationd.libpcl_stereod.libpcl_surfaced.libpcl_trackingd.libpcl_visualizationd.lib

上面这个问题,同样适用于执行结果不报错,但是却在console窗口显示非0退出的语句这个问题。

踩坑点4:

无法解析的外部符号"void __cdecl vtkRenderingOpenGL_AutoInit_Construct(void)" (?vtkRenderingOpenGL_AutoInit_Construct@@YAXXZ),函数"public: __cdecl `anonymous namespace'::vtkRenderingOpenGL_ModuleInit::vtkRenderingOpenGL_ModuleInit(void)" (??0vtkRenderingOpenGL_ModuleInit@?A0xdbae2661@@QEAA@XZ)
我用的是文章开头大佬的文章中的代码:

#include <pcl/visualization/cloud_viewer.h>#include <iostream>#include <pcl/io/io.h>#include <pcl/io/pcd_io.h>#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkInteractionStyle);VTK_MODULE_INIT(vtkRenderingFreeType);VTK_MODULE_INIT(vtkRenderingOpenGL); int user_data; void viewerOneOff(pcl::visualization::PCLVisualizer& viewer){ viewer.setBackgroundColor(1.0, 0.5, 1.0); pcl::PointXYZ o; o.x = 1.0; o.y = 0; o.z = 0; viewer.addSphere(o, 0.25,"sphere", 0); std::cout <<"i only run once" << std::endl; } void viewerPsycho(pcl::visualization::PCLVisualizer& viewer){ static unsigned count = 0; std::stringstream ss; ss <<"Once per viewer loop:" << count++; viewer.removeShape("text", 0); viewer.addText(ss.str(), 200, 300,"text", 0); //FIXME: possible race condition here: user_data++;} int main(){ pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>); pcl::io::loadPCDFile("rabbit.pcd", *cloud); pcl::visualization::CloudViewer viewer("Cloud Viewer"); //blocks until the cloud is actually rendered viewer.showCloud(cloud); //use the following functions to get access to the underlying more advanced/powerful //PCLVisualizer //This will only get called once viewer.runOnVisualizationThreadOnce(viewerOneOff); //This will get called once per visualization iteration viewer.runOnVisualizationThread(viewerPsycho); while (!viewer.wasStopped()) { //you can also do cool processing here //FIXME: Note that this is running in a separate thread from viewerPsycho //and you should guard against race conditions yourself... user_data++; } return 0;}

只需要把VTK_MODULE_INIT(vtkRenderingOpenGL);改为VTK_MODULE_INIT(vtkRenderingOpenGL2);即可

博客园

这个人很懒...

用户评论 (0)

发表评论

captcha