当前位置:   article > 正文

UBUNTU18.04编译安装PCL-1.8和VTK-7.1.1以及ceres1.14和eigen3.3.4_对‘pcl::pclbase::setindices(boos

对‘pcl::pclbase::setindices(boost::shared_ptr

编译安装PCL-1.8对应版本VTK-7.1.1

今天在编译LVI-SAM和LIO-SAM的时候都报错对‘pcl::PCLBase<pcl::PointXYZI>::setInputCloud(boost::shared_ptr<pcl::Point....未定义的引用
初步怀疑是PCL版本问题,(ROS自带的PCL和我自己安装的PCL-1.8)于是彻底卸载PCL重装.
电脑系统是UBUNTU18.04,安装PCL时注意要先安装VTK,且VTK版本跟PCL版本还要对应,否则会出现一些问题,目前我感觉最好用的还是PCL-1.8对应VTK-7.1.1

下载对应的包,
1.pcl-1.8.1
https://github.com/PointCloudLibrary/pcl/tree/pcl-1.8.1
2. VTK-7.1.1
https://vtk.org/download/#earlier

安装都是

mkdir build 
cd build
cmake ..
make -j16
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5

ubuntu20编译报错fatal error: boost/uuid/sha1.hpp: 没有那个文件或目录
经验证,是pcl1.18.0和boost不同版本出现的问题
boost1.63可以和pcl1.18.0配合。

我安装完后,编译PCL测试程序正常

测试安装

CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)
project(test_pcl)
 
find_package(PCL REQUIRED)
 
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
 
add_executable(test_pcl test.cpp)
 
target_link_libraries (test_pcl ${PCL_LIBRARIES})
 
install(TARGETS test_pcl RUNTIME DESTINATION bin)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

main:

#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>
using namespace std;
 
int main(int argc, char **argv) {//柱型点云测试
  cout << "Test PCL !" << endl;
  pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
  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<uint32_t>(r) << 16 | static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
      point.rgb = *reinterpret_cast<float*>(&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;
 
  pcl::visualization::CloudViewer viewer ("pcl—test测试");

  viewer.showCloud(point_cloud_ptr); 
  while (!viewer.wasStopped()){ };
  return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

编译运行

cmake ..
make
./test_pcl
  • 1
  • 2
  • 3

如果出现这个界面代表安装成功.
在这里插入图片描述

编译安装ceres-1.8对应版本eigen3.3.4

查看现存的版本:
Eigen3:

dpkg -s libeigen3-dev | grep Version
  • 1

OpenCV

pkg-config --modversion opencv  
  • 1

Boost version:

dpkg -s libboost-dev | grep Version
  • 1

查看cere-solover版本:

打开h安装ceres-solver的文件夹,然后打开ceres-solver的package.xml文件,在里面可以看到版本号
  • 1

删除之前的ceres-solver版本(删除之前安装的2.0版本)

sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a
sudo rm -r /usr/local/share/Ceres
  • 1
  • 2
  • 3

下载ceres-solver-1.14.0

wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
  • 1

解压

tar xvf ceres-solver-1.14.0.tar.gz
  • 1

编译

cd ceres-solver-1.14.0
mkdir build
cd build
cmake ..
sudo make 
  • 1
  • 2
  • 3
  • 4
  • 5

安装

sudo make install
  • 1

如果有报错error: variable or field ‘it’ declared void for (typename C::const_iterator it = container.begin();之类

原因就是eigen版本与ceres版本冲突
需要先删除eigen库,然后安装对应版本的,可以参考这个

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/304471
推荐阅读
相关标签