通过 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 : 2024-12-01 03:07:28
- Link: https://redefine.ohevan.com/2024/11/30/Docker搭建PCL环境/
- License: This work is licensed under CC BY-NC-SA 4.0.