QT6.6.1+PCL1.14.0+VTK9.3+CMAKE+VS2022编译在win10下配置踩坑记录

此配置我整了半个月,无数次想放弃,写此博客仅做为记录

本文讲解使用的环境是vs2022+pcl1.14.0+vtk9.3+qt6.6.1,默认已经安装好VS2022和QT6.6.1,都默认安装在C盘,最后再展示一个使用cmake配置QT的示例程序,并提供源码

Mark1:      PCL自带的VTK第三方库,是低配版,没有QT相关的dll,得使用VTK源码进行重新编译

Mark2:      Cmake使用最新版,本次使用的是cmake3.28.2

Mark3:      QT没有使用QMake而是使用Cmake,不仅仅是因为QMake要配置一大长串的lib,看着都烦(当然也确实是简单),而且CMake更符合目前的发展方向(也确实难且麻烦)

1,编译VTK

    vtk源码下载地址如下:

https://github.com/Kitware/VTK/tags

Mark:  VTK9.3.0源码VTK-9.3.0\Common\Core\vtkConstantImplicitBackend.h有个地方有错误,要提前修改。否则后面VTK会编译报错(有的博主说只编译报错一次影响不大,但我认为还是有影响的):        下图箭头所指的VTKCOMMONCORE_EXPORT删掉,然后保存文件

 

然后开始使用Cmake打开VTK源码,勾选Cmake的Grouped和Advanced,点击【Add Entry】按钮添加缓存变量 CMAKE_DEBUG_POSTFIX,类型为 STRING,值设置为 -gd。这样一次性就可以把releasedebug分开生成。配置编译器为VS2022为X64,

第一次Configure完成后,确认一下模块已经勾选或选择为YES,再次点击Configure

完成后,确认自动获取的Qt 版本以及Qt的各个模块路径是不是正确,注意Qt6_DIR得位置为C:\Qt\6.6.1\msvc2019_64\lib\cmake\Qt6,再次点击Configure,完成后应该没有红色提示,如果有,再次确认红色内容,有的报红色是可以通过再次点击Configure消除的,如果实在消除不了,再百度/谷歌搜索报错原因。点击Configure直到没有红色,最后再点击Generate。

使用VS2022以管理权限启动,打开build下的VTK.sln,在VS中先对AllBuild进行Debug和Realese生成,再对INSTALL进行Debug和Relese的生成,正常情况下,所有的生成都会成功,失败数0,此时可以在刚才所选的VTK文件生成路径下,找到需要的文件,将其中的四个文件夹拷贝,替换后面安装的pcl路径下自带的VTK中的文件。

2,PCL安装

https://github.com/PointCloudLibrary/pcl/releases

需要下载3个文件AllOne,PDB和源码安装AllOne时注意C盘路径PCL1.14.0不要有空格,OpenNI2要使用控制面板卸载,然后重新安装到C:\Program Files\PCL1.14.0\3rdParty\OpenNI2路径中

Mark:系统环境变量要添加两部分(更改系统环境变量,要重启电脑使之生效

Path中要添加如下所示:

C:\Program Files\PCL1.14.0\3rdParty\Qhull\bin
C:\Program Files\PCL1.14.0\3rdParty\FLANN\bin
C:\Program Files\PCL1.14.0\3rdParty\OpenNI2\Tools
C:\Program Files\PCL1.14.0\bin
C:\Program Files\PCL1.14.0\3rdParty\VTK\bin

解压下载的PDB文件夹,拷贝pdb文件到C:\Program Files\PCL1.14.0\bin文件夹中

使用Cmake对PCL源码进行重新编译(官方给的PCL库,cmake配置并没有包含VTK的qt部分)

编译PCL源码时配置如下,修改FLANN目录,OPENNI2目录,vtk目录和QT版本,其中Eigen的目录为:C:\Program Files\PCL1.14.0\3rdParty\Eigen3\share\eigen3\cmake

这个就可以生成vs项目了,生成项目后编制再安装就可以得到头文件和库文件

Mark:PCL源码编译我还是有报错,最终发现我只需要拷贝走cmake,替换掉官方给的PCL中的cmake文件就可以使用。

3,QT例程

新建编译器时选择CMake

Cmakelist配置:(比QMake简洁太多了,但是对Cmake要求比较高)


/***************
find_package(Qt6 REQUIRED COMPONENTS OpenGLWidgets)
set(PCL_DIR "C:\\Program Files\\PCL1.14.0\\cmake")
find_package(PCL 1.14.0 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

/***************


target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::OpenGLWidgets)
target_link_libraries(${PROJECT_NAME} PUBLIC  ${PCL_LIBRARIES})

如其他博主所言,在界面中拖入OpenGL Widget控件,并使之提升为QVTKOpenGLNativeWidget

添加程序头文件

#include <vtkGenericOpenGLRenderWindow.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>
#include <vtkCamera.h>






private:
pcl::visualization::PCLVisualizer::Ptr cloud_viewer;

添加测试程序:

 pcl::visualization::PCLVisualizer::Ptr viewer;
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    auto renderer2 = vtkSmartPointer<vtkRenderer>::New();
    auto renderWindow2 = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    renderWindow2->AddRenderer(renderer2);
    viewer.reset(new pcl::visualization::PCLVisualizer(renderer2, renderWindow2, "viewer", false));
    ui->openGLWidget->setRenderWindow(viewer->getRenderWindow());
    viewer->setupInteractor(ui->openGLWidget->interactor(), ui->openGLWidget->renderWindow());
    pcl::io::loadPCDFile("D:/3DTestImage/B1.pcd", *cloud);

    viewer->addPointCloud(cloud,"cloud");
    viewer->setBackgroundColor(0,0.3,0.4);
    //坐标轴方向渲染
    pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ>render(cloud->makeShared(),"z");
    viewer->updatePointCloud(cloud->makeShared(),render);
    viewer->addCoordinateSystem(10.0);

点云图像显示成功

例程地址:

https://download.csdn.net/download/qusibaniha/88817180?spm=1001.2014.3001.5503

也可以下载我编译配置好的,要注意对应PCL,VTK和VS2022,QT版本

https://download.csdn.net/download/qusibaniha/88817293?spm=1001.2014.3001.5503

根据提供的引用内容,NMAKE:-1: error: U1073错误是由于无法生成指定的文件而导致的。具体来说,错误信息中提到了无法生成"D:\Qt\Qt6.4\6.6.1\msvc2019_64\lib\Qt6Mqttd.lib"文件。这可能是由于以下几个原因导致的: 1. 缺少相关的依赖库或文件。请确保你的项目中包含了正确的依赖库,并且这些库的路径是正确的。 2. 编译器或构建工具的配置错误。请检查你的编译器和构建工具的配置,确保它们与你的项目要求相匹配。 3. 编译器或构建工具版本不兼容。请确保你使用的编译器和构建工具的版本与你的项目要求相匹配。 为了解决这个问题,你可以尝试以下几个方法: 1. 检查依赖库和文件路径是否正确。确保你的项目中包含了正确的依赖库,并且这些库的路径是正确的。 2. 检查编译器和构建工具的配置。确保你的编译器和构建工具的配置与你的项目要求相匹配。 3. 更新编译器和构建工具的版本。如果你的编译器和构建工具版本不兼容,尝试更新它们到与你的项目要求相匹配的版本。 4. 检查你的cmake文件是否编写错误。根据引用中的描述,错误可能是由于将CMAKE_SOURCE_DIR错误地当做CMAKE_CURRENT_SOURCE_DIR使用导致的。请检查你的cmake文件,确保路径和变量的使用是正确的。 希望以上方法能够帮助你解决NMAKE:-1: error: U1073错误。如果问题仍然存在,请提供更多的信息以便我们能够更好地帮助你解决问题。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值