PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖
生活随笔
收集整理的這篇文章主要介紹了
PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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等外部依赖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective C++ 50条款
- 下一篇: I'm stuck! ccf模拟题