VTK与PCL源码编译(Ubuntu 20.04.6)

**1.**第一步:安装基础编译工具和依赖

bash 复制代码
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装编译工具和基础依赖
sudo apt install -y build-essential cmake-curses-gui git

# 安装 PCL 和 VTK 的底层依赖
sudo apt install -y libboost-all-dev libeigen3-dev libflann-dev \
                    libusb-1.0-0-dev libqhull-dev libopenni-dev \
                    libopenni2-dev
# 安装必要的 X11 开发包(ui)
sudo apt update
sudo apt install libx11-dev libxrandr-dev libxi-dev
# 安装QT5
sudo apt update
sudo apt install -y qt5-default qtbase5-dev qtdeclarative5-dev \
                    qtquickcontrols2-5-dev qml-module-qtquick2 \
                    libqt5quick5 libqt5quickwidgets5 \
                    qttools5-dev-tools qtpositioning5-dev \
                    qtmultimedia5-dev libqt5svg5-dev

# 安装 Qt5(注意:这里不能再用 qt5-default)
sudo apt install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools \
                    libqt5opengl5-dev libqt5svg5-dev

# 安装其他可选依赖
sudo apt install -y libvtk7-dev   # 注意:这里安装的是系统自带的VTK 7,但仅用于满足PCL编译时的某些可选依赖检查,我们最终会覆盖它

第二步:编译安装 VTK 9.5

2.下载VTK 9.5源码并编译:

bash 复制代码
# 下载源码
wget https://www.vtk.org/files/release/9.5/VTK-9.5.0.tar.gz
tar -xzf VTK-9.5.0.tar.gz
cd VTK-9.5.0

# 创建编译目录
mkdir build && cd build

# 配置(启用Qt支持,这是PCL可视化必须的)
cmake .. -DCMAKE_BUILD_TYPE=Release \
         -DVTK_GROUP_ENABLE_Qt=YES \
         -DVTK_MODULE_ENABLE_VTK_GUISupportQt=YES \
         -DVTK_MODULE_ENABLE_VTK_GUISupportQtOpenGL=YES \
         -DVTK_MODULE_ENABLE_VTK_ViewsQt=YES \
         -DVTK_OPENGL_HAS_EGL=OFF \
         -DVTK_USE_X=ON \
         -DCMAKE_INSTALL_PREFIX=/usr/local

解释:

  • cmake:配置工具,它会检查你的系统环境,并生成Makefile。

  • -DCMAKE_BUILD_TYPE=Release:编译为"发布"版本(优化后,运行更快)。

  • -DVTK_GROUP_ENABLE_Qt=YES:开启Qt支持(PCL的可视化需要VTK的Qt模块)。

  • -DCMAKE_INSTALL_PREFIX=/usr/local:指定安装目录为 /usr/local(这是Linux下用户自行编译软件的默认位置)。

  • ..:表示CMake配置文件(CMakeLists.txt)在上一级目录。

如果出现错误提示缺少某些包 ,比如 Could NOT find Qt5,说明你的Qt没装全。请用以下命令补装

sudo apt install qtbase5-dev libqt5x11extras5-dev

然后重新运行上面的 cmake 命令。

bash 复制代码
# 编译(-j后面的数字是你的CPU核心数,可以加快速度)
make -j4
sudo make install
sudo ldconfig
  • make:根据Makefile开始编译源代码。

  • -j$(nproc):让make使用你CPU的所有核心并行编译,可以大大加快速度。例如你的CPU是4核,它就会用 -j4。

编译VTK需要较长时间 (大约20-40分钟,取决于电脑性能)。终端会不断滚动输出信息,看到100%就表示编译完成。

复制代码
sudo make install
  • sudo:需要管理员权限才能往 /usr/local 里写文件。

  • 这条命令会把编译好的库、头文件等复制到 /usr/local 下。

复制代码
sudo ldconfig
  • ldconfig:更新系统的共享库缓存,让新安装的VTK库能被系统找到。

VTK 9.5 安装完成! 可以用以下命令检查是否安装成功:

复制代码
ls /usr/local/lib/libvtk*   # 应该能看到很多 libvtk 开头的文件

第三步:编译安装 PCL 1.15

1.下载源码

bash 复制代码
cd ~
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
git checkout pcl-1.15.0   # 切换到 1.15 版本标签

2.配置和编译:

bash 复制代码
mkdir build && cd build

# 使用 ccmake 可以方便地检查和修改配置选项
ccmake ..
  • ccmake 是 cmake 的交互式文本界面,你可以方便地开关选项。

  • 输入命令后,终端会变成蓝色背景的界面,顶部显示各种选项。

配置步骤:

  1. 按 c 键(configure),开始第一次配置。可能会弹出一些信息,按回车继续。

  2. 配置完成后,你会看到很多选项。我们需要调整几个关键项:

    • 找到 CMAKE_BUILD_TYPE,默认可能是空,按回车进入编辑,输入 Release,然后回车。

    • 找到 CMAKE_INSTALL_PREFIX,默认是 /usr/local,保持不动。

    • 找到 WITH_VTK,默认应该是 ON,如果不是,按回车把它切换为 ON。

    • 找到 WITH_QT,同样切换为 ON。

    • 其他选项保持默认即可。

  3. 按 c 键再次配置(让新的设置生效)。

  4. 如果没有错误,按 g 键(generate)生成Makefile并退出。

如果配置过程中出现红色错误 ,通常是缺少依赖。例如提示 Could NOT find VTK,那说明我们的VTK安装可能有问题。请先检查VTK是否正确安装(执行 sudo ldconfig 后再试)。如果还是找不到,可以手动指定VTK路径:在ccmake界面按 t 键进入高级模式,找到 VTK_DIR,设置为 /usr/local/lib/cmake/vtk-9.5(具体路径根据你的安装位置调整)。

3.编译和安装 :

bash 复制代码
make -j$(nproc)
sudo make install
sudo ldconfig

三.如果VTK需要从新编译

要重新从头编译 VTK,你需要删除当前的 build 目录,然后重新创建并运行 CMake 配置,最后再次编译

bash 复制代码
1. 回到 VTK 源码根目录并删除旧的 build 文件夹

cd ~/VTK/VTK-9.5.0
rm -rf build

2. 创建新的 build 文件夹并进入

mkdir build
cd build

重新运行 CMake 配置(使用针对 ARM/Jetson 优化的配置)

cmake -DCMAKE_BUILD_TYPE=Release \
      -DVTK_GROUP_ENABLE_Qt=YES \
      -DVTK_MODULE_ENABLE_VTK_GUISupportQt=YES \
      -DVTK_OPENGL_HAS_EGL:BOOL=ON \
      -DVTK_USE_X:BOOL=OFF \
      -DCMAKE_INSTALL_PREFIX=/usr/local ..

make -j2   # 或者 make -j$(nproc) 如果你内存充足
sudo make install
sudo ldconfig

算法加速可以用:cuPCL(可选)

bash 复制代码
# 1. 克隆 NVIDIA 官方的 cuPCL 仓库
git clone https://github.com/NVIDIA-AI-IOT/cuPCL.git
cd cuPCL

# 2. 切换到适配你系统的分支 (Jetpack 5.x)
# 如果你的 Jetpack 是 5.x,应该有一个对应的分支,如果没有明确分支,main 分支通常也支持较新的版本。
# 你可以用 'git branch -a' 查看所有分支。假设我们使用 main 分支。
# git checkout jetpack5.x   # 如果有明确分支,请取消注释并执行

# 3. 编译 cuFilter 模块 (其中包含了 VoxelGrid)
cd cuFilter
make

编译成功后,你会在 cuFilter 目录下得到 libcufilter.so 库文件,以及对应的头文件(如 voxel_grid.h)。

第二步:修改你的项目配置

你需要告诉你的 CMake 项目去哪里找 cuPCL 的库和头文件。

  1. 将 cuPCL 添加到你的项目 :简单起见,你可以将整个 cuPCL 文件夹复制到你项目目录下(例如 /home/nvidia/Project/MarineSearchRescue/third_party/cuPCL)。

  2. 修改 CMakeLists.txt :在你的主 CMakeLists.txt 文件中,添加以下内容,找到 cuPCL 并链接它。

bash 复制代码
# 设置 cuPCL 的路径
set(CUPCL_ROOT "${CMAKE_SOURCE_DIR}/third_party/cuPCL" CACHE PATH "Path to cuPCL")
set(CUPCL_INCLUDE_DIR "${CUPCL_ROOT}/cuFilter")
set(CUPCL_LIBRARY "${CUPCL_ROOT}/cuFilter/libcufilter.so")

# 包含 cuPCL 的头文件目录
include_directories(${CUPCL_INCLUDE_DIR})

# ... 后面的 target_link_libraries 部分 ...
target_link_libraries(MarineSearchRescue
    ${PCL_LIBRARIES}
    ${OpenMP_CXX_LIBRARIES}
    ${CUPCL_LIBRARY}  # 链接 cuPCL 库
    # ... 其他库
)
相关推荐
志栋智能8 小时前
运维超自动化的版本控制与回滚机制
运维·自动化
中云DDoS CC防护蔡蔡8 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
Ruiery8 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
ClickHouseDB8 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
欧米欧9 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery9 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
todoitbo9 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
时间售卖铺9 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw10 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
前端精髓10 小时前
调用大模型API
运维·服务器·microsoft