虚拟机Ubuntu20.04安装PCL库问题记录

部署运行你感兴趣的模型镜像

问题起因:
在编译自己的相机SDK开发脚本时,报了类似如下的错误:

CMakeFiles/xag_nav_map_display.dir/src/pcl/pointcloud_io.cc.o: In function `pcl::PCDWriter::write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool)':
/usr/include/pcl-1.7/pcl/io/pcd_io.h:351: undefined reference to `pcl::PCDWriter::writeBinary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&)'
/usr/include/pcl-1.7/pcl/io/pcd_io.h:353: undefined reference to `pcl::PCDWriter::writeASCII(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, int)'
CMakeFiles/xag_nav_map_display.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeASCII<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&, int)':
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:486: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:598: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:613: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
CMakeFiles/xag_nav_map_display.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeBinary<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&)':
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:157: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:193: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:194: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:204: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:213: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:247: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
/usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:258: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
collect2: error: ld returned 1 exit status

推测应该是PCL动态库链接的有问题

最后复盘的时候想到其实之前我应该是都将库安装在了Anaconda的base环境下,但是没安装opencv,base环境中有pcl1.12。

一开始就是害怕这些库出问题,结果为了编译这个脚本在系统中装PCL的时候还是忘了之前都是使用虚拟环境了,导致现在装在系统里乱七八糟。。。哎,只好重装PCL。

opencv 4.5.5

安装在了/home/tian/lib/opencv-4.5.5-install/下(考虑到多版本兼容问题)

vtk7.1.1

安装好后,后续在编译pcl过程中出现:

/usr/bin/ld: 找不到 -lvtkIOMPIImage

/usr/bin/ld: 找不到 -lvtkIOMPIParallel

/usr/bin/ld: 找不到 -lvtkFiltersParallelDIY2

解决方法:
在cmake-gui中搜索关键字并勾选做重新编译

最终安装在/usr/local/路径下!

pcl1.12

由于在cmake过程中提示了很多can not find问题,依次解决,不要忽视,对应着去安装它的依赖metslib-0.5.3、OpenNI1.x版本

将~/.bashrc中虚拟环境的路径禁了。现在可能打不开conda

提示warning:
将/anaconda3/lib中的一些.so文件移动到了Tian_archive文件中,anaconda中的pcl环境可能会出问题,到时候安装完再还原回去吧。

最终安装在/usr/local/路径下!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们正在讨论在Ubuntu 20.04安装PCL(Point Cloud Library)1.8或更高版本。根据引用内容,我们可以从源代码构建PCL。以下是步骤: 1. 安装依赖项:首先,确保系统有必要的依赖。打开终端并运行: ```bash sudo apt update sudo apt install git build-essential cmake libboost-all-dev libeigen3-dev libflann-dev libvtk6-dev libvtk6-qt-dev libproj-dev libqhull-dev libopenni-dev libopenni2-dev ``` 2. 下载PCL源代码:从GitHub仓下载源代码。可以选择Release版本(如引用[1]和[5]所示): ```bash git clone https://github.com/PointCloudLibrary/pcl.git cd pcl # 查看可用的版本标签 git tag # 选择1.8或更高版本,例如pcl-1.8.1 git checkout pcl-1.8.1 # 或者选择更高版本,如pcl-1.9.1 ``` 3. 创建构建目录并配置: ```bash mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. ``` 4. 编译和安装: ```bash make -j2 # 使用2个核心编译,可以根据机器性能调整,如-j4 sudo make install ``` 注意:在编译过程中,如果遇到依赖问题,请根据错误提示安装缺失的依赖。 另外,引用[5]提到在Ubuntu 16.04安装pcl-1.9,但步骤类似。Ubuntu 20.04的依赖名称可能略有不同,但上述命令中的依赖名称已经针对20.04调整(如libvtk6-dev在20.04中可用,但注意20.04默认的VTK版本可能更高,如果遇到问题,可能需要安装其他版本的VTK)。 验证安装:可以编写一个简单的PCL程序,例如读取一个PCD文件(如引用[2]和[4]所示): ```cpp #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> int main() { pcl::PointCloud<pcl::PointXYZ> cloud; if (pcl::io::loadPCDFile<pcl::PointXYZ>("test.pcd", cloud) == -1) { PCL_ERROR("Couldn't read file\n"); return -1; } return 0; } ``` 编译并运行,确保没有错误。 §§相关问题§§ 1. 如何解决PCL安装过程中的依赖问题? 2. 如何在CMakeLists.txt中配置项目以使用安装PCL? 3. PCL中常用的点云处理功能有哪些?</think>### Ubuntu 20.04 安装 Point Cloud Library (PCL) 1.8+ 指南 #### 步骤1安装依赖项 ```bash sudo apt update sudo apt install git build-essential cmake libboost-all-dev libeigen3-dev libflann-dev libvtk7-dev libqhull-dev libopenni-dev libopenni2-dev libproj-dev ``` 注意:Ubuntu 20.04默认使用VTK7,需确保`libvtk7-dev`安装成功[^1][^5]。 #### 步骤2:获取PCL源代码 ```bash git clone https://github.com/PointCloudLibrary/pcl.git cd pcl git checkout pcl-1.8.1 # 或更高版本如pcl-1.9.1 ``` #### 步骤3:编译与安装 ```bash mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_GPU=ON .. make -j$(nproc) # 使用所有CPU核心编译 sudo make install ``` 关键参数说明: - `-DCMAKE_BUILD_TYPE=Release`:启用优化 - `-DBUILD_GPU=ON`:启用GPU加速(可选) - `-j$(nproc)`:并行编译加速[^1][^5] #### 步骤4:验证安装 创建测试文件`test_pcl.cpp`: ```cpp #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> int main() { pcl::PointCloud<pcl::PointXYZ> cloud; pcl::io::loadPCDFile("test.pcd", cloud); // 加载点云文件[^2][^4] return 0; } ``` 编译测试: ```bash g++ test_pcl.cpp -o test_pcl -lpcl_common -lpcl_io ./test_pcl ``` #### 常见问题解决 1. **缺失依赖错误**:根据CMake错误提示安装缺失包,例如: ```bash sudo apt install libusb-1.0-0-dev libpcap-dev ``` 2. **VTK兼容性问题**: ```bash sudo apt install vtk7 # 确保安装VTK7 ``` 3. **安装旧版本**(如需要): ```bash git tag # 查看可用版本 git checkout pcl-1.9.1 # 切换版本[^5] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值