WIN11下pcl环境配置

最近要把一个matlab的代码转到c++,其中用到了pcl库,并且要在windowns下运行,于是将配置过程记录下来供以后参考。

方案选择

要转换的matlab代码里面需要使用PCL库和g2o的库,看网上都说vcpkg好,于是我选用vcpkg+visual studio的方案。

vcpkg环境配置

首先安装vcpkg,参考https://github.com/microsoft/vcpkg
之后安装我需要的eigen库、vtk库、pcl库、g2o库以及xlnt库

eigen库

cd c:\src\vcpkg
.\vcpkg.exe install eigen3

vtk库

.\vcpkg.exe install vtk[core,opengl]

PCL库

.\vcpkg.exe install pcl[core,vtk,visualization,opengl]

g2o库

.\vcpkg.exe install g2o

xlnt库

.\vcpkg.exe install xlnt

这里有2个坑:
1、最开始我只安装了pcl[core],然后加入pcl的可视化头文件后编译报错找不到<pcl/visualization/pcl_visualizer.h>,于是搜了一下,发现需要安装[vtk、visualization]这些feature才能运行,另外vcpkg默认安装的都是x86版本的库。
2、代码需要复现matlab的plot函数,网上搜了一下,发现pcl里面的pcl::visualization::PCLPlotter正好可以实现我想要的功能,于是copy了网上的代码,发现报错:Error: no override found for ‘vtkContextDevice2D’.,代码死在了this->Context->GetDevice()->SetViewportSize(vtkVector2i(size));,网上一搜,发现需要加入两行代码:

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingContextOpenGL2)

但是,加入后编译报错了,于是又在网上搜,发现其他人在ubuntu下编译vtk时需要配置选项,我感觉应该是vtk的feature少安装了,于是安装了pcl[opengl]和vtk[opengl],安装后编译通过了,之前的报错也没有了,可以正常地plot了。

visual studio cmake工程建立

因为后续有跨平台的需求,因此选择建立cmake工程。
在这里插入图片描述

之后修改一下工程的编译环境,visual studio默认x64的编译环境,我们需要改成x86才能使用上一步安装的库。
在这里插入图片描述

然后编写CMakeList.txt,如下:

cmake_minimum_required (VERSION 3.8)
set(CMAKE_TOOLCHAIN_FILE C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake)
set(CMAKE_CXX_STANDARD 17)
find_package(Eigen3 CONFIG REQUIRED)
find_package(PCL CONFIG REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
find_package(Xlnt CONFIG REQUIRED)
find_package(g2o CONFIG REQUIRED)
#find_package(VTK REQUIRED)
#include("${VTK_USE_FILE}")
# 将源代码添加到此项目的可执行文件。
add_executable (vstest "vstest.cpp" "vstest.h"  "pgo.cpp" "pgo.hpp")
#target_link_libraries(vstest Eigen3::Eigen ${PCL_LIBRARIES} ${VTK_LIBRARIES} xlnt::xlnt)
target_link_libraries(vstest Eigen3::Eigen ${PCL_LIBRARIES} xlnt::xlnt)
target_link_libraries(vstest g2o::core g2o::stuff g2o::types_icp g2o::types_sba)

其中下面这一句很关键,要加上才能找到vcpkg安装的库

set(CMAKE_TOOLCHAIN_FILE C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake)

之后就可以在需要用库的地方include需要的头文件就可以了。

#include <Eigen/Dense>
#include <deque>
#include <vector>
#include <string>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/pcl_plotter.h>
#include <pcl/common/transforms.h>
#include <pcl/io/io.h>
#include <g2o/types/slam3d/types_slam3d.h>
#include <g2o/core/block_solver.h>
#include <g2o/core/optimization_algorithm_levenberg.h>
#include <g2o/solvers/eigen/linear_solver_eigen.h>
#include <memory>
#include <io.h>
#include <direct.h>
#include <xlnt/xlnt.hpp>
#include <iostream>
#include <cmath>
#include <vtkAutoInit.h>

另外,之前visual studio用的不多,记录一个小坑。
有时代码会出现abort() has been called的错误弹窗,发现是eigen导致的,错误原因参考http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html,需要把c++版本改为c++17

set(CMAKE_CXX_STANDARD 17)

错误弹窗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值