编译FFMpeg n4.2.5、OpenCV-3.4.16、OpenCV-4.5.4

编译OpenCV

做测试时需要用OpenCV。虽然网络上有大量的关于编译OpenCV的教程,但是还是遇到了问题。因此记录了编译的过程,希望以后能更加顺利。

依赖

安装依赖包

编译环境时Ubuntu 18.04。先在Ubuntu 18.04安装各种软件。

sudo apt-get update
sudo apt-get upgrade
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"

sudo apt install build-essential libgtk2.0-dev  libjpeg-dev libjasper-dev libopenexr-dev libtbb-dev  libvtk7-dev libtiff-dev libtiff5-dev libblas-dev liblapack-dev libopenblas-dev libatlas-base-dev libv4l-dev

准备头文件

准备下列头文件,否则OpenCV的configure会报告错误。

sudo ln -s /usr/include/libv4l1-videodev.h  /usr/include/linux/videodev.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/videoio_c.h  /usr/include/x86_64-linux-gnu/sys/videoio.h

编译FFMpeg

使用Ubuntu自带的FFMpeg时,编译OpenCV出错。要从源代码编译FFMpeg,并且要使能pic标志。

获取FFMpeg源代码

通过git,获取FFMpeg源代码。使用FFMpeg master版本,编译opencv-3.4.16和opencv-4.5.4都失败。使用FFMpeg n4.2.5, 编译opencv-3.4.16和opencv-4.5.4,都能成功。

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
git tag -l n4.*
git checkout -b n4.2.5

使用FFMpeg master(2021年12月9日, 最新tag是n4.5-dev)版本,编译opencv-4.5.4失败,部分log如下:

[ 56%] Building CXX object modules/gapi/CMakeFiles/opencv_gapi.dir/src/backends/render/grenderocv.cpp.o
In file included from /proj/hankf/hankf/slam/opencv-4.5/opencv-4.5.4/modules/videoio/src/cap_ffmpeg.cpp:50:0:
/proj/hankf/slam/opencv-4.5/opencv-4.5.4/modules/videoio/src/cap_ffmpeg_impl.hpp:537:5: error: \u2018AVBSFContext\u2019 does not name a type; did you mean \u2018AVIOContext\u2019?
     AVBSFContext* bsfc;
     ^~~~~~~~~~~~
     AVIOContext
/proj/hankf/slam/opencv-4.5/opencv-4.5.4/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function \u2018void CvCapture_FFMPEG::init()\u2019:
/proj/hankf/slam/opencv-4.5/opencv-4.5.4/modules/videoio/src/cap_ffmpeg_impl.hpp:583:5: error: \u2018bsfc\u2019 was not declared in this scope
     bsfc = NULL;
     ^~~~

使用FFMpeg master(2021年12月9日, 最新tag是n4.5-dev)版本,编译opencv-3.4.16失败,部分log如下:

[ 51%] Linking CXX shared library ../../lib/libopencv_shape.so
[ 51%] Built target opencv_shape
In file included from /proj/hankf/slam/opencv-3.4/opencv-3.4.16/modules/videoio/src/cap_ffmpeg.cpp:49:0:
/proj/hankf/slam/opencv-3.4/opencv-3.4.16/modules/videoio/src/cap_ffmpeg_impl.hpp:548:5: error: \u2018AVBSFContext\u2019 does not name a type; did you mean \u2018AVIOContext\u2019?
     AVBSFContext* bsfc;
     ^~~~~~~~~~~~
     AVIOContext
/proj/hankf/hankf/slam/opencv-3.4/opencv-3.4.16/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function \u2018void CvCapture_FFMPEG::init()\u2019:
/proj/hankf/hankf/slam/opencv-3.4/opencv-3.4.16/modules/videoio/src/cap_ffmpeg_impl.hpp:595:5: error: \u2018bsfc\u2019 was not declared in this scope
     bsfc = NULL;
     ^~~~
/proj/hankf/hankf/slam/opencv-3.4/opencv-3.4.16/modules/videoio/src/cap_ffmpeg_impl.hpp:991:47: error: \u2018AVStream {aka struct AVStream}\u2019 has no member named \u2018codec\u2019
         AVCodecContext *enc = ic->streams[i]->codec;
                                               ^~~~~
/proj/hankf/hankf/slam/opencv-3.4/opencv-3.4.16/modules/videoio/src/cap_ffmpeg_impl.hpp:1040:45: error: invalid conversion from \u2018const AVCodec*\u2019 to \u2018AVCodec*\u2019 [-fpermissive]
                 codec = avcodec_find_decoder(enc->codec_id);
                         ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~

FFMpeg目录结构

/proj/hankf/slam/ffmpeg$ pwd
/proj/hankf/slam/ffmpeg
/proj/hankf/slam/ffmpeg$ tree -L 1 -d
    compat
    doc
    ffbuild
    fftools
    libavcodec
    libavdevice
    libavfilter
    libavformat
    libavresample
    libavutil
    libpostproc
    libswresample
    libswscale
    presets
    tests
    tools

FFMpeg配置命令

./configure --enable-nonfree --enable-pic --enable-shared

配置FFMpeg时,要使能pic标志,否则编译OpenCV出错。

libavcodec.a(hevc_cabac.o):  relocation R_X86_64_PC32 against `ff_w_ff' can not be used when makin with -fPIC

FFMpeg编译

下面是编译和安装FFMpeg的简要记录。

/proj/hankf/slam/ffmpeg$ make -j 64
LD	libavfilter/libavfilter.so.8
LD	libavdevice/libavdevice.so.59
LD	ffmpeg_g
LD	ffprobe_g
STRIP	ffprobe
STRIP	ffmpeg
/proj/hankf/slam/ffmpeg$ sudo make install
[sudo] password for hankf: 
INSTALL	libavdevice/libavdevice.a
INSTALL	libavdevice/libavdevice.so
STRIP	install-libavdevice-shared
......
INSTALL	ffmpeg
INSTALL	ffprobe
......
INSTALL	libavutil/ffversion.h
INSTALL	libavutil/libavutil.pc

运行FFMpeg

编译和安装FFMpeg后,运行FFMpeg,得到错误“libavdevice.so.58: cannot open shared object file: No such file or directory”。

/proj/hankf/slam/ffmpeg$ ./ffmpeg -v
./ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory

默认情况下,FFMpeg的库文件放在目录/usr/local/lib下。把FFMpeg的lib路径加到文件/etc/ld.so.conf.d/ffmpeg.conf中,再执行ldconfig使配置生效,就能正常运行FFMpeg。

/proj/hankf/slam/ffmpeg$ cat /etc/ld.so.conf.d/ffmpeg.conf

/usr/local/lib

/proj/hankf/slam/ffmpeg$ sudo ldconfig
[sudo] password for hankf: 
/proj/hankf/slam/ffmpeg$ ./ffmpeg -v
ffmpeg version n4.2.5 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --enable-nonfree --enable-pic --enable-shared
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100

OpenCV

获取OpenCV源代码

从http://opencv.org/downloads.html下载OpenCV源代码,会得到一个文件名类似 opencv-3.4.16.zip 的压缩包。OpenCV源代码是cmake工程。

OpenCV目录结构

解压OpenCV后,得得下面的目录。OpenCV不允许在源代码目录编译,最好在父级目录创建一个build子目录。

/proj/hankf/slam/opencv-3.4$ pwd
/proj/hankf/slam/opencv-3.4

/proj/hankf/slam/opencv-3.4$ tree -L 2 -d
   build
   opencv-3.4.16
       3rdparty
       apps
       cmake
       CMakeFiles
       data
       doc
       include
       modules
       platforms
       samples

配置OpenCV

在父级目录中的build子目录下,执行cmake,配置OpenCV。部分log如下:

/proj/hankf/slam/opencv-3.4/build$ cmake ../opencv-3.4.16/
-- General configuration for OpenCV 3.4.16 =====================================
--   Version control:               unknown
-- 
--   Platform:
--     Timestamp:                   2021-12-09T08:24:47Z
--     Host:                        Linux 5.4.0-90-generic x86_64
--     CMake:                       3.10.2
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/gmake
--     Configuration:               Release
-- 
--   CPU/HW features:
--     Baseline:                    SSE SSE2 SSE3
--       requested:                 SSE3
--     Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
--       requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
--       SSE4_1 (16 files):         + SSSE3 SSE4_1
--       SSE4_2 (2 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
--       FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
--       AVX (6 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
--       AVX2 (30 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
--       AVX512_SKX (7 files):      + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++11:                       YES
--     C++ Compiler:                /usr/bin/c++  (ver 7.5.0)
--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed  
--     Linker flags (Debug):        -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed  
--     ccache:                      YES
--     Precompiled headers:         NO
--     Extra dependencies:          dl m pthread rt
--     3rdparty dependencies:
-- 
--   OpenCV modules:
--     To be built:                 calib3d core dnn features2d flann highgui imgcodecs imgproc ml objdetect photo shape stitching superres ts video videoio videostab viz
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 python3
--     Applications:                tests perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         NO
-- 
--   GUI: 
--     GTK+:                        YES (ver 2.24.32)
--       GThread :                  YES (ver 2.56.4)
--       GtkGlExt:                  NO
--     VTK support:                 YES (ver 7.1.1)
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        /usr/lib/x86_64-linux-gnu/libwebp.so (ver encoder: 0x020e)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.34)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.0.9)
--     JPEG 2000:                   /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)
--     OpenEXR:                     /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2_2)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
-- 
--   Video I/O:
--     DC1394:                      NO
--     FFMPEG:                      YES
--       avcodec:                   YES (ver 59.14.100)
--       avformat:                  YES (ver 59.9.102)
--       avutil:                    YES (ver 57.10.101)
--       swscale:                   YES (ver 6.1.101)
--       avresample:                YES (ver 3.7.0)
--     GStreamer:                   NO
--     libv4l/libv4l2:              NO
--     v4l/v4l2:                    linux/videodev.h linux/videodev2.h
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Intel IPP:                   2020.0.0 Gold [2020.0.0]
--            at:                   /proj/hankf/hankf/slam/opencv-3.4/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2020.0.0)
--               at:                /proj/hankf/hankf/slam/opencv-3.4/build/3rdparty/ippicv/ippicv_lnx/iw
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.3.4)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /proj/hankf/hankf/slam/opencv-3.4/opencv-3.4.16/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         /usr/lib/jvm/default-java/include /usr/lib/jvm/default-java/include/linux /usr/lib/jvm/default-java/include
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /proj/hankf/hankf/slam/opencv-3.4/build

配置过程中,还报告找不到OpenBLAS、Atlas。这两个消息不影响后续编译。

-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
-- Could NOT find Atlas (missing: Atlas_CLAPACK_INCLUDE_DIR) 

编译OpenCV

继续在build目录下,执行命令“make -j 64", 编译OpenCV。部分log如下:

/proj/hankf/slam/opencv-3.4/build$ make -j 64
[  0%] Building C object 3rdparty/quirc/CMakeFiles/quirc.dir/src/decode.c.o
[  0%] Generate opencv.pc
[  0%] Building C object 3rdparty/ittnotify/CMakeFiles/ittnotify.dir/src/ittnotify/jitprofiling.c.o
[  0%] Building C object 3rdparty/quirc/CMakeFiles/quirc.dir/src/quirc.c.o
......
[100%] Building CXX object modules/stitching/CMakeFiles/opencv_perf_stitching.dir/perf/perf_estimators.cpp.o
[100%] Building CXX object modules/stitching/CMakeFiles/opencv_perf_stitching.dir/perf/opencl/perf_warpers.cpp.o
[100%] Building CXX object modules/stitching/CMakeFiles/opencv_perf_stitching.dir/perf/perf_matchers.cpp.o
[100%] Linking CXX executable ../../bin/opencv_traincascade
[100%] Built target opencv_test_calib3d
[100%] Linking CXX executable ../../bin/opencv_test_stitching
[100%] Linking CXX executable ../../bin/opencv_perf_stitching
[100%] Built target opencv_test_videostab
[100%] Built target opencv_traincascade
[100%] Built target opencv_createsamples
[100%] Built target opencv_perf_objdetect
[100%] Built target opencv_test_objdetect
[100%] Built target opencv_perf_core
[100%] Built target opencv_test_stitching
[100%] Built target opencv_perf_stitching
[100%] Built target opencv_test_dnn
[100%] Built target opencv_perf_imgproc
[100%] Built target opencv_test_imgproc
[100%] Built target opencv_test_core

安装OpenCV

继续在build目录下,执行命令“sudo make install", 安装OpenCV。部分log如下:

/proj/hankf/slam/opencv-3.4/build$ sudo make install
[sudo] password for hankf: 
[  0%] Built target gen-pkgconfig
[  0%] Built target ittnotify
[  3%] Built target ippiw
[ 13%] Built target opencv_core
[ 22%] Built target opencv_imgproc
[ 24%] Built target opencv_imgcodecs
[ 25%] Built target opencv_videoio
[ 25%] Built target opencv_highgui
[ 26%] Built target opencv_ts
[ 30%] Built target opencv_test_core
[ 33%] Built target opencv_perf_core
......
[ 96%] Built target opencv_perf_superres
[ 97%] Built target opencv_videostab
[ 97%] Built target opencv_test_videostab
[ 98%] Built target opencv_traincascade
[ 98%] Built target opencv_createsamples
[ 98%] Built target opencv_annotation
[ 99%] Built target opencv_visualisation
[100%] Built target opencv_interactive-calibration
[100%] Built target opencv_version
Install the project...
-- Install configuration: "Release"
......
-- Set runtime path of "/usr/local/bin/opencv_visualisation" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_interactive-calibration
-- Set runtime path of "/usr/local/bin/opencv_interactive-calibration" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_version
-- Set runtime path of "/usr/local/bin/opencv_version" to "/usr/local/lib"

安装时,要使用sudo命令提供管理员权限,否则会报错。

/proj/hankf/slam/opencv-4.5/build$ make install
[  0%] Built target opencv_highgui_plugins
[  0%] Built target opencv_videoio_plugins
[  0%] Built target ittnotify
[  3%] Built target ippiw
.........
[100%] Built target opencv_interactive-calibration
[100%] Built target opencv_version
[100%] Built target opencv_model_diagnostics
Install the project...
-- Install configuration: "Release"
CMake Error at cmake_install.cmake:41 (file):
  file cannot create directory: /usr/local/share/licenses/opencv4.  Maybe
  need administrative privileges.

Makefile:150: recipe for target 'install' failed
make: *** [install] Error 1

编译OpenCV 4.5.4

用同样的方法配置OpenCV 4.5.4,然后编译OpenCV,也能编译成功。部分log如下:

[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/util/variant_tests.cpp.o
[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/streaming/gapi_streaming_vpl_core_test.cpp.o
[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/util/optional_tests.cpp.o
[100%] Building CXX object modules/gapi/CMakeFiles/opencv_test_gapi.dir/test/util/any_tests.cpp.o
[100%] Linking CXX executable ../../bin/opencv_test_gapi
[100%] Built target opencv_perf_gapi
[100%] Built target opencv_test_gapi

重新编译的log如下:

/proj/hankf/slam/opencv-4.5/build$ make -j 64
[  1%] Built target quirc
[  1%] Built target ittnotify
[  1%] Built target opencv_videoio_plugins
[  1%] Built target opencv_highgui_plugins
[  4%] Built target ippiw
[  5%] Built target ade
[ 11%] Built target libprotobuf
[ 19%] Built target opencv_core
[ 19%] Built target opencv_version
[ 19%] Built target opencv_flann
[ 20%] Built target opencv_ml
[ 27%] Built target opencv_imgproc
[ 28%] Built target opencv_photo
[ 32%] Built target opencv_features2d
[ 32%] Built target opencv_imgcodecs
[ 42%] Built target opencv_dnn
[ 42%] Built target opencv_model_diagnostics
[ 43%] Built target opencv_videoio
[ 47%] Built target opencv_calib3d
[ 47%] Built target opencv_highgui
[ 47%] Built target opencv_visualisation
[ 47%] Built target opencv_annotation
[ 48%] Built target opencv_interactive-calibration
[ 49%] Built target opencv_objdetect
[ 50%] Built target opencv_stitching
[ 51%] Built target opencv_ts
[ 53%] Built target opencv_video
[ 54%] Built target opencv_perf_dnn
[ 54%] Built target opencv_test_flann
[ 56%] Built target opencv_test_features2d
[ 57%] Built target opencv_test_highgui
[ 57%] Built target opencv_perf_objdetect
[ 57%] Built target opencv_perf_imgcodecs
[ 58%] Built target opencv_test_photo
[ 59%] Built target opencv_perf_photo
[ 59%] Built target opencv_perf_features2d
[ 59%] Built target opencv_perf_calib3d
[ 59%] Built target opencv_test_objdetect
[ 60%] Built target opencv_test_ml
[ 60%] Built target opencv_test_imgcodecs
[ 61%] Built target opencv_perf_videoio
[ 62%] Built target opencv_test_stitching
[ 65%] Built target opencv_perf_core
[ 65%] Built target opencv_perf_stitching
[ 66%] Built target opencv_test_dnn
[ 68%] Built target opencv_perf_video
[ 68%] Built target opencv_test_video
[ 71%] Built target opencv_perf_imgproc
[ 72%] Built target opencv_test_videoio
[ 75%] Built target opencv_test_calib3d
[ 83%] Built target opencv_gapi
[ 87%] Built target opencv_test_core
[ 92%] Built target opencv_test_imgproc
[ 94%] Built target opencv_perf_gapi
[100%] Built target opencv_test_gapi

cmake错误

OpenCV不允许在源代码目录编译,要在专门的build目录执行cmake进行配置。如果不小心在在源代码目录执行了cmake进行配置,后面在build目录执行cmake也会出错。这时候,要删除源代码目录的CMakeCache.txt和子目录CMakeFiles。

/proj/hankf/slam/opencv-4.5/build2$ cmake ../opencv-4.5.4/
CMake Error at CMakeLists.txt:11 (message):
  FATAL: In-source builds are not allowed.
         You should create a separate directory for build files.
-- Configuring incomplete, errors occurred!

/proj/hankf/slam/opencv-4.5/build2$ cd ../opencv-4.5.4/
/proj/hankf/slam/opencv-4.5/opencv-4.5.4$ ls -l
total 144
drwxrwxr-x 22 hankf hankf  4096 Oct  9 23:48 3rdparty
drwxrwxr-x  9 hankf hankf  4096 Oct  9 23:48 apps
drwxrwxr-x  8 hankf hankf  4096 Oct  9 23:48 cmake
-rw-rw-r--  1 hankf hankf  1965 Dec 28 09:22 CMakeCache.txt
drwxrwxr-x  2 hankf hankf  4096 Dec 28 09:22 CMakeFiles
-rw-rw-r--  1 hankf hankf 69678 Oct  9 23:48 CMakeLists.txt
-rw-rw-r--  1 hankf hankf   191 Oct  9 23:48 CONTRIBUTING.md
-rw-rw-r--  1 hankf hankf   665 Oct  9 23:48 COPYRIGHT
drwxrwxr-x  7 hankf hankf  4096 Oct  9 23:48 data
drwxrwxr-x  8 hankf hankf  4096 Oct  9 23:48 doc
drwxrwxr-x  3 hankf hankf  4096 Oct  9 23:48 include
-rw-rw-r--  1 hankf hankf 11358 Oct  9 23:48 LICENSE
drwxrwxr-x 23 hankf hankf  4096 Oct  9 23:48 modules
drwxrwxr-x 14 hankf hankf  4096 Oct  9 23:48 platforms
-rw-rw-r--  1 hankf hankf   847 Oct  9 23:48 README.md
drwxrwxr-x 24 hankf hankf  4096 Oct  9 23:48 samples
-rw-rw-r--  1 hankf hankf  3820 Oct  9 23:48 SECURITY.md

/proj/hankf/slam/opencv-4.5/opencv-4.5.4$ rm CMakeCache.txt 
/proj/hankf/slam/opencv-4.5/opencv-4.5.4$ rm CMakeFiles/* -rf
/proj/hankf/slam/opencv-4.5/opencv-4.5.4$ rm CMakeFiles/.* -rf
rm: refusing to remove '.' or '..' directory: skipping 'CMakeFiles/.'
rm: refusing to remove '.' or '..' directory: skipping 'CMakeFiles/..'
/proj/hankf/slam/opencv-4.5/opencv-4.5.4$ rmdir CMakeFiles

/proj/hankf/slam/opencv-4.5/opencv-4.5.4$ cd ../build2/
/proj/hankf/slam/opencv-4.5/build2$ cmake ../opencv-4.5.4/
-- The CXX compiler identification is GNU 7.5.0
-- The C compiler identification is GNU 7.5.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
...........
posted @ 2021-12-09 17:33  HankFu  阅读(551)  评论(0编辑  收藏  举报