PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖

由于需要用到PCL中on_nurbs模块做拟合,但是ros自带的pcl中没有该模块。所以源码安装了PCL 1.9,但是在使用过程中遇到了如下问题。

1. 安装过程

1.安装如下依赖项

sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
#sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev //会卸载ros安装的部分软件包
#sudo apt-get install libqhull* libgtest-dev//安装不了,改成下一句命令
sudo apt-get install libgtest-dev libqhull-dev libqhull-doc
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre

但是在安装vtk5.10库文件的时候会删除ros中的相关文件,所以跳过了该命令。

下载PCL源代码

git clone https://github.com/PointCloudLibrary/pcl.git

下载过程更换成手机热点,从而达到高速下载速度。

3、编译安装

ls
cd pcl
mkdir release
cd release cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON -DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr ..
make -j8
sudo make install

4、如果需要PCLVisualizer,安装OpenNI、OpenNI2

sudo apt-get install libopenni-dev
sudo apt-get install libopenni2-dev

2. PCLConfig.cmake文件找不到eigen等外部依赖

在将PCL成功编译安装之后,在项目的CMakeLists.txt中文件中添加如下语句,用于添加PCL相关库文件:

set(PCL_DIR /home/Andy/my_workspace/pcl-master/release)
find_package(PCL REQUIRED COMPONENTS)
find_package(Eigen3 REQUIRED)
list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")include_directories( ${PCL_INCLUDE_DIRS} )
link_directories(${PCL_LIBRARY_DIRS})
add_definitions( ${PCL_DEFINITIONS} )

但是在 cmake的过程中会提示出现如下问题:

By not providing "FindEigen.cmake" in CMAKE_MODULE_PATH this project hasasked CMake to find a package configuration file provided by "Eigen", butCMake did not find one.Could not find a package configuration file provided by "Eigen" (requestedversion 3.1) with any of the following names:EigenConfig.cmakeeigen-config.cmakeAdd the installation prefix of "Eigen" to CMAKE_PREFIX_PATH or set"Eigen_DIR" to a directory containing one of the above files.  If "Eigen"provides a separate development package or SDK, be sure it has beeninstalled.
Call Stack (most recent call first):/home/Andy/my_workspace/pcl-master/release/PCLConfig.cmake:314 (find_eigen)/home/Andy/my_workspace/pcl-master/release/PCLConfig.cmake:547 (find_external_library)CMakeLists.txt:32 (find_package)CMake Error at /home/Andy/my_workspace/pcl-master/release/PCLConfig.cmake:60 (message):common is required but eigen was not found
Call Stack (most recent call first):/home/Andy/my_workspace/pcl-master/release/PCLConfig.cmake:365 (pcl_report_not_found)/home/Andy/my_workspace/pcl-master/release/PCLConfig.cmake:547 (find_external_library)CMakeLists.txt:32 (find_package)-- Configuring incomplete, errors occurred!
See also "/home/Andy/my_workspace/Code/Clion_code/PCL_example/PCL_Curve_Fitting/build/CMakeFiles/CMakeOutput.log".
See also "/home/Andy/my_workspace/Code/Clion_code/PCL_example/PCL_Curve_Fitting/build/CMakeFiles/CMakeError.log".

产生这个问题的原因在于PCLConfig.cmake文件找不到eigen依赖。
可以将PCLConfig.cmake文件中的find_eigen函数改为如下形式:

macro(find_eigen)if(PCL_ALL_IN_ONE_INSTALLER)set(EIGEN_ROOT "${PCL_ROOT}/3rdParty/Eigen")elseif(NOT EIGEN_ROOT)get_filename_component(EIGEN_ROOT "/usr/include/eigen3" ABSOLUTE)endif(PCL_ALL_IN_ONE_INSTALLER)if(PKG_CONFIG_FOUND)pkg_check_modules(PC_EIGEN eigen3)endif(PKG_CONFIG_FOUND)find_path(EIGEN_INCLUDE_DIRS Eigen/CoreHINTS ${PC_EIGEN_INCLUDEDIR} ${PC_EIGEN_INCLUDE_DIRS} "${EIGEN_ROOT}" "$ENV{EIGEN_ROOT}"PATHS "$ENV{PROGRAMFILES}/Eigen 3.0.0" "$ENV{PROGRAMW6432}/Eigen 3.0.0""$ENV{PROGRAMFILES}/Eigen" "$ENV{PROGRAMW6432}/Eigen"   PATH_SUFFIXES eigen3 include/eigen3 include)find_package_handle_standard_args(eigen DEFAULT_MSG EIGEN_INCLUDE_DIRS)set(EIGEN_DEFINITIONS ${EIGEN_DEFINITIONS} -DEIGEN_USE_NEW_STDVECTOR -DEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET)
endmacro()

修改之后,重新编译还有报错,提示找不到OpenNIConfig.cmake。同理需要将PCLConfig.cmake文件中相应的函数进行修改。

改完之后,将成功编译。

完整的PCLConfig.cmake我以上传。可以直接下载,替换掉原来的PCLConfig.cmake文件。
PCLConfig.cmake

PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖相关推荐

  1. cmake使用教程(四)调用外部共享库和头文件

    文件组织形式: 创建根目录test1,在根目录下创建CMakeLists.txt文件和src文件夹,在src/目录下创建CMakeLists.txt和main.cpp,其中根目录下面的CMakeLis ...

  2. 添加msg文件找不到目录add_message_files() directory not found:

     问题描述: ROS在修改完xml和cmakelists文件后编译,出添加msg文件找不到目录的情况 CMake Error at /opt/ros/melodic/share/genmsg/cmak ...

  3. 以为是 unable to start correctly (0xc0000142) 实际上却是 gfluidimgproc_func.simd.hpp文件找不到的解决方法(含opencv编译使用)

    起因 注意,下面的内容都是win10情况下发生的 在某些时候,我们从比较新的电脑上用vs,编译使用了比较新的opencv4.X库的运行程序,并且打算放到比较旧的电脑上使用时 会发现在动态链接库都是完整 ...

  4. 006 - CMake 安装动态库并生成 XxxConfig.cmake 文件

    CMake 安装动态库并生成 XxxConfig.cmake 文件 文章目录 CMake 安装动态库并生成 XxxConfig.cmake 文件 引言 展示 简单解释CMakeLists.txt se ...

  5. VScode配置CMAKE文件

    创建一个vscode文件 记得一定要创建一个build文件夹,因为cmake编译过程中产生的中间文件会放到build文件夹中. 打开VScode 配置文件 launch.json {"ver ...

  6. Ubuntu下通过CMake文件编译CUDA+OpenCV代码操作步骤

    在 CUDA_Test  工程中,CUDA测试代码之前仅支持在Windows10 + VS2013编译,今天在Ubuntu 14.04下写了一个CMakeLists.txt文件,支持在Linux下也可 ...

  7. matlab-xlsread无法打开文件找不到文件

    前几天用matlab处理数据,遇到"xlsread无法打开文件找不到文件"这样一个问题,后来发现是文件路径太长了,导致出现这样的问题,把文件发到根目录后缩短了文件路径,问题就解决了 ...

  8. 编译过程中,termcap.h 文件找不到路径 licli.a终于生成

    编译过程中,termcap.h      文件找不到路径   查看是linux  源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜termca ...

  9. cmake 指定编译器_我们需要懂得CMake文件

    我们需要懂得CMake文件 一.前言 从事于linux下的C++开发的人员都知道,在C++下编写程序是没有类似windows下编译器的一键编译和运行的按钮,只能由我们开发人员进行手动编译.运行:为了减 ...

最新文章

  1. R语言数据包自带数据集之ISwR包的melanom数据集字段解释、数据导入实战
  2. 程序员眼中的电脑和空调 | 每日趣闻
  3. 广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B...
  4. elasticsearch导入数据的几种方法
  5. 平安数据中心高可用运维白皮书
  6. python post请求_python发送http的post请求
  7. linux同步IO: sync、fsync与fdatasync
  8. 募捐名单_年度捐款,以及为什么现在应该捐款,而不是以后
  9. 使用Context和Hooks来管理状态
  10. Android 字母导航条实现
  11. hdmi中深度色彩像素打包
  12. 太极熊猫3服务器维护中,太极熊猫3月10日维护公告_瑞兽稀有技修改_蚕豆网新闻...
  13. sinx/x在0到+∞的积分
  14. 多媒体计算机辅助英语教学,浅谈多媒体计算机辅助英语教学
  15. 微信小程序实现随机标签云
  16. 职业玩家手速测试软件,游戏界手速最快的人,APM近千,Faker都自愧不如
  17. Qt基于networkmanager嵌入式linux的wifi网络连接
  18. python list diff_Python List交集,并集,差集的应用
  19. 账号和权限管理(一)
  20. (侯捷C++)1.1面向对象高级编程(上)

热门文章

  1. 使用JS/Jquery获得父窗口的几个方法(笔记)
  2. Mysql,SqlServer,Oracle主键自动增长的设置
  3. SpringBoot (二) :全局异常处理设置
  4. python路径拼接os.path.join()函数的用法
  5. 天元MegEngine训练推理
  6. NVIDIA CUDA-X AI
  7. BEP 7:CUDA外部内存管理插件(下)
  8. YOLOvi(i=1,2,3,4)系列
  9. C++ 中multiset 的使用
  10. [codeforces]Round #538 (Div. 2) F. Please, another Queries on Array?