windows下使用msys2中的库安装pcl

windows下只是想用下pcl,
直接装PCL的allinone,用MSVC!!!
直接装PCL的allinone,用MSVC!!!
直接装PCL的allinone,用MSVC!!!
5min搞定,下面别看了

1. msys2安装以及配置

下载安装:https://www.msys2.org/
安装C++环境,toolchain,cmake等

2. msys2下能使用的一些库

当前的版本:

  • eigen 3.4
  • boost 1.84
  • openmp 17.0.6-1
  • 其他的缺少装啥

3. 源码编译

flann 1.9.1 : https://github.com/flann-lib/flann/tags
VTK 9.1 : https://github.com/Kitware/VTK/tags
PCL 1.12.1 : https://github.com/PointCloudLibrary/pcl/releases
flann和VTK的版本是根据windows下的pcl的allinone的版本来的,其他版本windows下没有试过,不确定可不可行,至少用MSVC尝试了几个不行。

3.1 flann

flann正常编译安装,注意install的安装路径要自己改一下,装在默认路径Program Files(x86)需要管理员权限

3.2 VTK

因为部分库使用的是msys2环境,所以编译VTK的时候eigen和tiff需要选择使用外部库(cmake-gui)中勾选一下VTK_MODULE_USE_EXTERNAL_VTK_tiff,eigen也是使用外部库,即使用msys2中的。
必须得添加openmp,否则pcl无法正常编译,msys2中的vtk就是没有带openmp的

另外几个编译错误

 error: 'int32_t' is not a member of  
std'; did you mean 'int32_t'?
  209 | std::array vtkSEPReader::ComputeExtent() const

使用C++11编译,在CMakeLists.txt中增加

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
error: template argument 1 is invalid  209 | std::array vtkSEPReader::ComputeExtent() const

vtkSEPReader.h中添加#include

  1. VTK编译的时候不要使用msys2中的qt(msys2中的qt可能缺东西,和msys2中的vtk一样),如果要连同qt一起编译,从qt官网下载qt的在线安装工具,先使用在线安装工具把qt装了。

3.3 PCL

报错:

error: 'find_if' is not a member of 'std'; did you mean 'find'?
  179 |       const auto iterator = std::find_if (elements.cbegin (), elements.cend (),      |                                  ^~~~~~~
      |                                  find

添加头文件:#include

4. 系统环境变量

检查一下上面安装的库是否都加入到系统环境变量中的

5. 测试

pcltest.cpp

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
 
int main(int argc, char **argv) {
  cout << "Test PCL !" << endl;
  pcl::PointCloud::Ptr point_cloud_ptr (new pcl::PointCloud);
  uint8_t r(255), g(15), b(15);
  for (float z(-1.0); z <= 1.0; z += 0.05) {
  	for (float angle(0.0); angle <= 360.0; angle += 5.0) {
      pcl::PointXYZRGB point;
      point.x = cos (pcl::deg2rad(angle));
      point.y = sin (pcl::deg2rad(angle));
      point.z = z;
      uint32_t rgb = (static_cast(r) << 16 | static_cast(g) << 8 | static_cast(b));
      point.rgb = *reinterpret_cast(&rgb);
      point_cloud_ptr->points.push_back (point);
    }
    if (z < 0.0) {
      r -= 12;
      g += 12;
    }
    else {
      g -= 12;
      b += 12;
    }
  }
  
  point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
  point_cloud_ptr->height = 1;
  cout << "point size = " << point_cloud_ptr->size() << endl;
 
  pcl::visualization::CloudViewer viewer ("pcl—test");

  viewer.showCloud(point_cloud_ptr); 
  while (!viewer.wasStopped()){ };

  return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(test)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# eigen
include_directories("C:\\msys64\\mingw64\\include\\eigen3")

set(VTK_DIR "C:\\cmakeLibs\\vtk\\lib\\cmake\\vtk-9.1")
find_package(VTK REQUIRED)
if(VTK_FOUND)
    message(STATUS "found VTK_DIR")
endif(VTK_FOUND)

include(${VTK_USE_FILE})
include_directories("C:\\cmakeLibs\\vtk\\include\\vtk-9.1") 


# pcl
set(PCL_DIR "C:\\cmakeLibs\\pcl\\share\\pcl-1.12")
find_package(PCL 1.12 REQUIRED )

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})


add_executable(pcltest pcltest.cpp)
target_link_libraries(pcltest ${VTK_LIBRARIES} ${PCL_LIBRARIES} )

注:cmakeLibs是我源码编译软件安装的地方

windows下使用msys2中的库安装pcl_第1张图片
done,有问题私我

你可能感兴趣的:(windows,c++)