VTK与PCL源码编译(Ubuntu 20.04.6)

张开发
2026/4/4 3:53:15 15 分钟阅读
VTK与PCL源码编译(Ubuntu 20.04.6)
1.第一步安装基础编译工具和依赖# 更新系统 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.52.下载VTK 9.5源码并编译# 下载源码 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_TYPERelease \ -DVTK_GROUP_ENABLE_QtYES \ -DVTK_MODULE_ENABLE_VTK_GUISupportQtYES \ -DVTK_MODULE_ENABLE_VTK_GUISupportQtOpenGLYES \ -DVTK_MODULE_ENABLE_VTK_ViewsQtYES \ -DVTK_OPENGL_HAS_EGLOFF \ -DVTK_USE_XON \ -DCMAKE_INSTALL_PREFIX/usr/local解释cmake配置工具它会检查你的系统环境并生成Makefile。-DCMAKE_BUILD_TYPERelease编译为“发布”版本优化后运行更快。-DVTK_GROUP_ENABLE_QtYES开启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 命令。# 编译-j后面的数字是你的CPU核心数可以加快速度 make -j4 sudo make install sudo ldconfigmake根据Makefile开始编译源代码。-j$(nproc)让make使用你CPU的所有核心并行编译可以大大加快速度。例如你的CPU是4核它就会用-j4。编译VTK需要较长时间大约20-40分钟取决于电脑性能。终端会不断滚动输出信息看到100%就表示编译完成。sudo make installsudo需要管理员权限才能往/usr/local里写文件。这条命令会把编译好的库、头文件等复制到/usr/local下。sudo ldconfigldconfig更新系统的共享库缓存让新安装的VTK库能被系统找到。VTK 9.5 安装完成可以用以下命令检查是否安装成功ls /usr/local/lib/libvtk* # 应该能看到很多 libvtk 开头的文件第三步编译安装 PCL 1.151.下载源码cd ~ git clone https://github.com/PointCloudLibrary/pcl.git cd pcl git checkout pcl-1.15.0 # 切换到 1.15 版本标签2.配置和编译mkdir build cd build # 使用 ccmake 可以方便地检查和修改配置选项 ccmake ..ccmake是 cmake 的交互式文本界面你可以方便地开关选项。输入命令后终端会变成蓝色背景的界面顶部显示各种选项。配置步骤按c键configure开始第一次配置。可能会弹出一些信息按回车继续。配置完成后你会看到很多选项。我们需要调整几个关键项找到CMAKE_BUILD_TYPE默认可能是空按回车进入编辑输入Release然后回车。找到CMAKE_INSTALL_PREFIX默认是/usr/local保持不动。找到WITH_VTK默认应该是ON如果不是按回车把它切换为ON。找到WITH_QT同样切换为ON。其他选项保持默认即可。按c键再次配置让新的设置生效。如果没有错误按g键generate生成Makefile并退出。如果配置过程中出现红色错误通常是缺少依赖。例如提示Could NOT find VTK那说明我们的VTK安装可能有问题。请先检查VTK是否正确安装执行sudo ldconfig后再试。如果还是找不到可以手动指定VTK路径在ccmake界面按t键进入高级模式找到VTK_DIR设置为/usr/local/lib/cmake/vtk-9.5具体路径根据你的安装位置调整。3.编译和安装make -j$(nproc) sudo make install sudo ldconfig三.如果VTK需要从新编译要重新从头编译 VTK你需要删除当前的build目录然后重新创建并运行 CMake 配置最后再次编译1. 回到 VTK 源码根目录并删除旧的 build 文件夹 cd ~/VTK/VTK-9.5.0 rm -rf build 2. 创建新的 build 文件夹并进入 mkdir build cd build 重新运行 CMake 配置使用针对 ARM/Jetson 优化的配置 cmake -DCMAKE_BUILD_TYPERelease \ -DVTK_GROUP_ENABLE_QtYES \ -DVTK_MODULE_ENABLE_VTK_GUISupportQtYES \ -DVTK_OPENGL_HAS_EGL:BOOLON \ -DVTK_USE_X:BOOLOFF \ -DCMAKE_INSTALL_PREFIX/usr/local .. make -j2 # 或者 make -j$(nproc) 如果你内存充足 sudo make install sudo ldconfig算法加速可以用cuPCL可选# 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 的库和头文件。将 cuPCL 添加到你的项目简单起见你可以将整个cuPCL文件夹复制到你项目目录下例如/home/nvidia/Project/MarineSearchRescue/third_party/cuPCL。修改CMakeLists.txt在你的主CMakeLists.txt文件中添加以下内容找到 cuPCL 并链接它。# 设置 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 库 # ... 其他库 )

更多文章