cmake install_Ubuntu16.04非root用户安装OpenCV4并使用g++/CMake编译

前言

今天使用C++写了一个简单的程序,代码中调用了OpenCV库函数。在本机macOS下环境搭建比较顺利,而放到服务器上时由于没有root权限,无法使用apt-get,无法使用sudo,网上的大多数教程无法照搬,在搭建OpenCV环境时遇到了一些小坑。经过不断的踩坑终于配好了环境,特此记录一下。

安装CMake

首先下载CMake,如果wget太慢建议本地下载后上传至服务器。

wget https://cmake.org/files/v3.17/cmake-3.17.0-Linux-x86_64.tar.gz

解压。

tar zxvf cmake-3.17.0-Linux-x86_64.tar.gz

打开.bashrc。

vim ~/.bashrc

修改环境变量,添加的路径为刚刚解压后的路径。

export PATH=/home/fangqingkai/cmake-3.17.0-Linux-x86_64/bin:$PATH

source一下使刚刚的配置生效。

source ~/.bashrc

测试一下,大功告成。

(base) fangqingkai@cpdp151:~/cmake-3.17.0-Linux-x86_64/bin$ cmake --version
cmake version 3.17.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

安装OpenCV

首先下载OpenCV源码,我下载的是最新的OpenCV4.2.0版本,解压。

unzip opencv-4.2.0.zip

创建工作文件夹。

cd opencv-4.2.0/
mkdir build
cd build/

下面是最关键的一步,需要注意的两点:①设置OPENCV_GENERATE_PKGCONFIG=YES,这是由于在OpenCV4中,默认关闭了生成opencv.pc文件的选项,这会导致在使用g++编译时,通过pkg-config无法找到OpenCV的库文件。②设置CMAKE_INSTALL_PREFIX为用户目录,由于我们是非root用户,只能将其安装在用户目录下,否则后面安装时会由于权限不足而导致错误。

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/home/fangqingkai/ ..

在执行cmake的过程中,需要下载一个文件ippicv_2019_lnx_intel64_general_20180723.tgz,由于服务器上网速可能较慢,可以先手动下载该文件,并将其上传到服务器,我将其放在了用户主目录下。接下来需要修改OpenCV的配置文件,将该文件47行的"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/"修改为"file:~/",即用户主目录。这样速度就快多了。

vim ~/opencv-4.2.0/3rdparty/ippicv/ippicv.cmake

接下来编译安装即可。

make -j8
make install

到此为止如果没有出错,OpenCV就安装完了,并且可以使用CMake来编译运行了,而如果要使用g++编译,还需要对pkg-config进行进一步的配置。

配置pkg-config

pkg-config的作用,简而言之就是在编译时寻找库文件的,因此能不能找到库文件,其搜索路径至关重要,我们可以通过修改环境变量PKG_CONFIG_PATH来修改该命令的搜索路径。

更具体的说,pkg-config命令是通过查询*.pc文件来找到库的位置的,而刚刚提到的PKG_CONFIG_PATH就是用于指示*.pc文件的路径。刚刚执行cmake安装OpenCV时,我们开启了OPENCV_GENERATE_PKGCONFIG选项,该选项为我们创建了pkg-config指令需要的~/lib/pkgconfig/opencv4.pc文件,因此我们将环境变量PKG_CONFIG_PATH的值设置为该文件所在的目录即可,在~/.bashrc中添加以下内容。如果之前PKG_CONFIG_PATH有其他内容的话建议在前面追加而不是直接覆盖。

export PKG_CONFIG_PATH=/home/fangqingkai/lib/pkgconfig/

(由于OpenCV4默认不生成opencv4.pc文件,这里折腾了好久…尝试按照网上的教程自己写opencv.pc文件,但由于OpenCV版本问题一直出现error,最后打开选项才解决这个问题。)

使用g++编译

首先需要说明的是,使用CMake编译是更加推荐的方式,这也是为什么OpenCV4默认不生成opencv4.pc文件,但对CMake不太熟悉的小伙伴(比如我)可能还是会选择使用g++来进行编译。使用g++编译的命令如下,源文件为optimizer.cpp,这里通过pkg-config命令动态链接所需要的库,最后注意一定要使用C++11以上版本,否则会出错。

g++ optimizer.cpp -o optimizer `pkg-config opencv4 --cflags --libs` -std=c++14

使用CMake编译

使用CMake编译则较为容易,按照以下模板填写项目名、源文件即可。CMakeLists.txt如下。

cmake_minimum_required(VERSION 3.15)
project(optimizer)
find_package(OpenCV)
set(CMAKE_CXX_STANDARD 14)
add_executable(optimizer optimizer.cpp)
target_link_libraries(optimizer ${OpenCV_LIBS})

执行以下命令编译。

cmake .
make

总结

梳理了一下其实也没有太复杂的地方,不过在配置过程中还是折腾了一段时间...搞的过程中也深感自己基本功不够扎实,g++的编译参数还得查来查去(捂脸),CMake也应该好好学习一下。想到今天在知乎很火的CMake堆排序/红黑树面试题,感觉再不学习就要失业了呀(逃

你可能感兴趣的:(cmake,install,cmake,安装,cmake使用,cmake安装,cmake配置opencv出错,cmake配置出错)