cmake编译pcl报错Could NOT find openni (missing: OPENNI_INCLUDE_DIRS)

本文记录了在安装点云库PCL过程中遇到的问题及解决办法。主要介绍了当使用PCL1.8.1与cmake3.10.4进行编译时出现的关于OpenNI的错误,并给出了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学《点云库PCL从入门到精通》
由于我一目十行,很多东西也没仔细看
所以有可能会有一些错误
记录一下

问题:
再按照书中的顺序下载安装了PCL1.8.1,以及cmake3.10.4之后,编译文件出现错误

Could NOT find openni (missing: OPENNI_INCLUDE_DIRS)

解决办法:
没搜到中文的解决办法
参考了一个社区帖子
http://www.pcl-users.org/Could-NOT-find-openni-missing-OPENNI-INCLUDE-DIRS-td4033363.html

大概意思是PCL不支持OpenNI2,建议下载安装OpenNI 1.x的版本
于是我在百度搜
发现openni被apple收购了
官网直接关了

于是在csdn下载中找到了一个openni 1.x版本
https://download.youkuaiyun.com/download/fallen_devil/4393869
这个下载了可以用

最后就解决了这个问题

另外多说一句:
不需要追求cmake一个warning都没有
一开始我看红了很多句话
改了error之后还是有warning
因为DSSDK_DIR not found之类的
但是我看书上的截图也是报了这个warning的
所以不管他们就好了

<think>好的,我现在需要处理用户关于PCL_Common库的使用或问题的询问。首先,我需要明确用户的具体需求,他们可能遇到了编译错误、链接问题,或者API使用上的困惑。接下来,我要结合系统指令中的引用内容,特别是引用[1]中提到的库版本冲突和回退方法,以及引用[2]中关于使用apt-get安装以避免库冲突的建议。 首先,用户提到PCL_Common,这是点云库(PCL)中的一个基础模块。常见问题可能包括安装问题、依赖项缺失或版本不兼容。根据引用[1],当遇到库版本不兼容时,回退到旧版本可能有效。例如,用户可能安装了新版本的PCL,但某些依赖如Boost或Eigen的版本不匹配,导致编译错误。此时,可以建议用户检查PCL的版本,并尝试降级到稳定版本,类似于yaml-cpp的处理方式。 其次,引用[2]提到使用apt-get安装以避免库冲突。对于PCL,用户可能通过源码编译遇到了问题,而使用系统包管理器安装预编译的二进制包可能更稳定。因此,建议用户使用sudo apt-get install libpcl-dev来安装PCL,并确保依赖库如CUDA或OpenNI的正确安装。 另外,编译时的常见错误包括找不到头文件或链接库失败。例如,如果用户遇到“undefined reference to pcl::CommonFunction”,这可能是因为链接器没有找到PCL_Common库。需要检查CMakeLists.txt是否正确包含target_link_libraries(... pcl_common),并确认PCL的安装路径正确。 还有,PCL的模块化结构可能导致用户遗漏某些依赖。例如,PCL_Common依赖Boost的文件系统、系统组件,以及Eigen3。需要确保这些依赖已正确安装,并在CMake中配置好。例如,使用find_package(Boost REQUIRED COMPONENTS filesystem system)find_package(Eigen3 REQUIRED)。 关于示例代码,用户可能需要一个简单的使用PCL_Common的例子,比如点云的基本操作或坐标转换。需要提供一个完整的代码片段,并强调包含必要的头文件和命名空间,同时提醒编译命令中的链接选项。 此外,用户可能遇到的运行时错误,如段错误,可能与内存管理有关。PCL中的共享指针使用不当可能导致问题,需检查是否正确使用pcl::make_shared或直接初始化对象。 最后,需要生成相关问题,涵盖安装、编译配置、依赖管理、API使用和调试等方面,帮助用户全面理解可能的问题点。同时,引用[3]提到的路径名和文件系统概念可能与PCL中文件读取相关,例如加载点云文件时的路径错误,需要确保路径正确并使用合适的函数。 总结来说,我需要分步骤解答用户可能遇到的问题,结合系统引用中的解决方案,提供具体的安装建议、编译配置示例、常见错误处理方法,并生成相关问题引导用户深入排查。</think>[用户可见层] # PCL_Common库使用与问题解决指南 ## 一、安装问题 1. **系统包管理器安装** 推荐使用`apt-get`安装预编译版本以避免依赖冲突[^2]: ```bash sudo apt-get update sudo apt-get install libpcl-dev ``` 这将自动安装PCL_Common及其依赖项(如Boost、Eigen等)。 2. **源码编译问题** 若需从源码编译,需注意: - 检查依赖库版本是否匹配(如Boost ≥1.55, Eigen ≥3.1) - 使用CMake指定安装路径: ```cmake cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. make -j4 sudo make install ``` ## 二、编译配置示例 **CMakeLists.txt关键配置** ```cmake cmake_minimum_required(VERSION 3.10) project(pcl_common_example) find_package(PCL 1.8 REQUIRED COMPONENTS common) find_package(Boost REQUIRED COMPONENTS filesystem system) include_directories(${PCL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) add_executable(main main.cpp) target_link_libraries(main ${PCL_LIBRARIES} ${Boost_LIBRARIES}) ``` ## 三、常见API使用场景 **点云坐标转换示例** ```cpp #include <pcl/common/transforms.h> #include <pcl/point_cloud.h> #include <pcl/point_types.h> int main() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); Eigen::Matrix4f transform = Eigen::Matrix4f::Identity(); transform(0,0) = 0.707; transform(0,1) = -0.707; // 45度旋转 transform(1,0) = 0.707; transform(1,1) = 0.707; transform(2,3) = 1.0; // Z轴平移1米 pcl::transformPointCloud(*cloud, *cloud, transform); return 0; } ``` 编译命令: ```bash g++ -std=c++14 main.cpp -o main -l pcl_common -l boost_system ``` ## 四、典型错误与解决 1. **头文件缺失错误** ```text fatal error: pcl/common/common.h: No such file or directory ``` **解决**: - 确认`find_package(PCL REQUIRED)`已正确执行 - 检查`${PCL_INCLUDE_DIRS}`是否包含在`include_directories()`中 2. **链接错误** ```text undefined reference to `pcl::getTransFromUnitVectorsZY(...) ``` **解决**: - 添加链接选项`-l pcl_common` - 确认CMake中`target_link_libraries`包含`${PCL_LIBRARIES}` 3. **版本冲突** 若出现`GLIBCXX`或`CXXABI`错误,可尝试回退PCL版本,方法类似引用[1]中的yaml-cpp降级流程: ```bash brew unlink pcl brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT_HASH>/Formula/pcl.rb ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值