Ubuntu16.04编译libfacedetection

本文介绍了一个基于CMake和OpenCV的人脸检测库构建过程,包括使用CMake设置项目标准、编译选项、链接库,以及如何添加源文件和执行示例。

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

源码:https://github.com/ShiqiYu/libfacedetection.git

CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
PROJECT (facedetection)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
SET(BUILD_SHARED_LIBS ON)

FIND_PACKAGE(OpenCV REQUIRED)

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src
                    ${OpenCV_INCLUDE_DIRS})
ADD_LIBRARY(facedetection src/facedetectcnn.cpp 
                          src/facedetectcnn-floatdata.cpp 
                          src/facedetectcnn-int8data.cpp 
                          src/facedetectcnn-model.cpp)
ADD_EXECUTABLE(face_detect example/libfacedetectcnn-example.cpp)
TARGET_LINK_LIBRARIES(face_detect ${OpenCV_LIBS} facedetection)
<think>好的,我现在要帮用户解决在Ubuntu 16.04编译Cartographer时遇到的错误。首先,我需要回忆一下用户提供的引用内容,看看里面有没有相关的解决方案。 用户引用了三个资料,都是关于在Ubuntu 16.04安装Cartographer的。引用[2]提到安装absl的问题,可以通过运行install_abseil.sh脚本解决。引用[3]列出了安装依赖项的命令,包括libeigen3-dev、libgflags-dev等,还有安装ceres的步骤。可能用户遇到的错误和这些依赖项有关。 接下来,我得想常见的编译错误有哪些。比如依赖项缺失、abseil库问题、protobuf版本冲突、Eigen3路径问题,以及编译器版本不兼容。这些都是编译过程中常见的问题点。 首先,用户可能没有安装所有必需的依赖包。根据引用[3],需要确保安装了所有列出的依赖项,特别是libboost-all-dev、libeigen3-dev这些。如果用户漏掉了某个包,编译时会报错,比如找不到头文件或者链接库失败。 然后是abseil库的问题,引用[2]提到如果出现absl相关的错误,需要运行install_abseil.sh脚本。这个脚本可能负责下载和安装正确版本的abseil库,所以用户可能需要执行这个脚本来解决相关问题。 Protobuf版本冲突也是一个常见问题。Cartographer可能要求特定版本的protobuf,而系统自带的可能不兼容。用户需要检查是否安装了正确的版本,可能需要通过源码编译安装指定版本,并确保路径正确。 关于Eigen3,有时候CMake可能找不到正确的路径,需要手动指定EIGEN3_INCLUDE_DIR。用户可能需要设置这个变量指向Eigen的头文件目录,比如/usr/include/eigen3。 编译器版本方面,Ubuntu 16.04默认的GCC是5.4,而Cartographer可能需要C++14或更高支持。虽然5.4应该支持C++14,但如果用户使用了其他编译器或者有版本冲突,可能需要升级到更高版本,或者调整编译器的标志。 另外,用户是否按照正确的步骤安装ceres-solver?引用[3]提到需要安装ceres,这个步骤是否正确完成?如果ceres没有正确安装,编译时也会报错。 还有可能的问题包括权限问题,比如运行脚本时没有chmod +x,或者使用了sudo。用户需要确保在正确的目录下运行脚本,并且有执行权限。 总结下来,解决方案应该分步骤:首先检查依赖项是否全部安装,然后处理abseil库的问题,接着检查protobuf版本,确认Eigen3路径,最后处理编译器问题。同时,提醒用户注意脚本的执行权限和正确顺序,以及推荐使用双系统而非虚拟机,这点在引用[1]中提到过,虽然可能和当前错误无关,但可以避免其他潜在问题。 现在需要将这些思路整理成用户易懂的步骤,确保每个可能的错误点都有对应的解决方法,并引用提供的资料作为支持。同时,生成相关问题,帮助用户进一步排查其他可能的问题。</think>### Ubuntu 16.04编译Cartographer错误解决方案 #### 1. 检查依赖项安装 **问题原因**:编译Cartographer需要完整的依赖环境,缺少关键库会导致编译中断。 **解决方案**: 执行以下命令安装所有依赖项(引用[3]内容): ```bash sudo apt-get install -y google-mock libboost-all-dev libeigen3-dev libgflags-dev libgoogle-glog-dev liblua5.2-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build protobuf-compiler python-sphinx ros-kinetic-tf2-eigen libatlas-base-dev libsuitesparse-dev liblapack-dev ``` 若提示`libeigen3-dev`版本问题,需手动指定路径(见步骤4)。 --- #### 2. 修复Abseil库问题 **问题现象**:编译时提示`absl`相关错误(如`absl::string_view`未定义)。 **解决方案**(引用[2]内容): ```bash sudo apt-get install stow sudo chmod +x ~/carto_ws/src/cartographer/scripts/install_abseil.sh cd ~/carto_ws/src/cartographer/scripts ./install_abseil.sh ``` 此脚本会从源码编译并安装兼容的Abseil库。 --- #### 3. 处理Protobuf版本冲突 **问题现象**:`protoc`版本不匹配(如`This file was generated by a newer version of protoc`)。 **解决方案**: - 卸载系统原有protobuf: ```bash sudo apt-get remove libprotobuf-dev protobuf-compiler ``` - 手动安装指定版本(如v3.6.1): ```bash git clone -b v3.6.1 https://github.com/protocolbuffers/protobuf.git cd protobuf ./autogen.sh && ./configure && make -j4 sudo make install sudo ldconfig ``` --- #### 4. 指定Eigen3头文件路径 **问题现象**:`Eigen/Core`文件未找到。 **解决方案**: 在CMakeLists.txt中添加路径声明: ```cmake set(EIGEN3_INCLUDE_DIR /usr/include/eigen3) # 确保路径存在 ``` 或通过命令行传递参数: ```bash catkin_make -DEIGEN3_INCLUDE_DIR=/usr/include/eigen3 ``` --- #### 5. 编译器兼容性调整 **问题现象**:C++11/C++14特性支持错误。 **解决方案**: - 升级GCC/G++至7.x版本(Ubuntu 16.04默认GCC 5.4): ```bash sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-7 g++-7 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70 ``` - 在`catkin_make`命令中指定C++标准: ```bash catkin_make -DCMAKE_CXX_STANDARD=14 ``` --- ### 注意事项 - **避免使用虚拟机**:虚拟机可能导致线程资源不足或外设兼容性问题(引用[1])。 - **完整编译流程**:需按顺序执行`catkin_make_isolated --install --use-ninja`。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值