通过 Docker 搭建 PCL 环境
 
			1.在容器内部构建
个人推荐使用这种方式,用Dockerfile总会出奇奇怪怪的问题。
1.1 运行容器
| 1 | docker run -it --name=pcl ubuntu:latest | 
1.2 容器内部配置
在宿主机中创建一个sources.list文件,里面添加下面内容:
| 1 | # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 | 
详细配置可以见:Ubuntu 清华镜像源
然后把该文件复制pcl到容器中:
| 1 | docker cp sources.list pcl:/etc/apt | 
在容器内执行:
| 1 | apt update | 
如果更新失败,大概率是会报找不到certificates这样的错误。直接安装好ca-certificates即可:
| 1 | apt install ca-certificates | 
然后重新执行apt update即可更新成功。
最后再执行一遍:
| 1 | apt upgrade | 
1.3 配置 PCL 和 C++ 环境
PCL可以直接通过 Ubuntu 的软件包管理器安装:
| 1 | sudo apt install -y libpcl-dev | 
这会自动安装PCL的核心库和常见的依赖项,如Eigen、FLANN和VTK。
验证PCL是否正确安装:
| 1 | pkg-config --modversion pcl_common | 
如果安装成功,会显示PCL的版本号,例如1.12.1。
如果需要PCL的可视化模块(基于VTK),可以确保安装以下依赖:
| 1 | apt install libvtk7-dev | 
然后,使用pcl_visualization模块来实现点云的 3D 可视化。
安装其它工具:
| 1 | apt install -y cmake clang clangd libomp-dev | 
如果不想clangd的语法提示出幺蛾子(避免报找不到omp.h的错误),最好把libomp-dev安装好。
安装x11服务(为了显示程序的ui):
| 1 | apt install x11-apps | 
最后通过 VSCode 连接到容器内部即可。
1.4 libomp-dev 是什么?(补充,可以跳过)
libomp-dev是 OpenMP 运行时库和开发文件的 Debian/Ubuntu 软件包。OpenMP(Open Multi-Processing)是一个用于共享内存并行编程的 API,主要用于 C、C++ 和 Fortran 语言。它允许程序员使用编译器指令和库函数来创建并行代码,充分利用多核处理器的计算能力。
libomp-dev 包含:
- OpenMP 头文件(如 omp.h)
- OpenMP 运行时库的开发文件
- 编译 OpenMP 程序所需的工具和配置
安装这个包的主要目的是:
- 允许编译器(如 GCC、Clang)支持 OpenMP 并行编程
- 提供编译 OpenMP 程序所需的头文件和库
- 启用 -fopenmp编译选项
典型的使用场景:
| 1 | 
 | 
编译这样的代码需要添加 -fopenmp 选项:
| 1 | g++ -fopenmp your_file.cpp -o your_program | 
2.通过 Dockerfile 创建
还是先创建镜像源文件sources.list。
然后创建Dockerfile,在里面加入下面的内容:
| 1 | FROM ubuntu:latest | 
关于注释部分ENV说明:如果用镜像源不成功,就把设置镜像源那一行注释掉,然后设置代理来更新下载。your-proxy-address是宿主机的IP地址。
构建镜像:
| 1 | docker build --no-cache -t ubuntu-pcl:latest . | 
如果在/etc/apt/sources.list中更改了 APT 源列表,而没有使用--no-cache,Docker 可能会使用旧的缓存层,导致源列表的更改不会反映在最终的镜像中。当使用--no-cache时,Docker 会忽略缓存,确保每个命令都重新执行,特别是在修改了基础文件(如/etc/apt/sources.list)时,确保镜像构建时使用的是新的 APT 源列表。
- Title: 通过 Docker 搭建 PCL 环境
- Author: loskyertt
- Created at : 2024-11-30 22:10:05
- Updated at : 2025-02-17 04:36:55
- Link: https://redefine.ohevan.com/2024/11/30/Docker搭建PCL环境/
- License: This work is licensed under CC BY-NC-SA 4.0.
