• 编译FFMpeg n4.2.5、OpenCV3.4.16、OpenCV4.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
    ...........
    
  • 相关阅读:
    IO流图片加密。
    IO流(流的标准处理异常代码)
    字节流写出中文。
    字节流读取中文。
    IO流BufferedInputStream和BufferOutputStream拷贝。
    Collection集合。
    《C#并发编程经典实例》学习笔记—2.3 报告任务
    《C#并发编程经典实例》学习笔记—2.2 返回完成的任务
    《C#并发编程经典实例》学习笔记—2.1 暂停一段时间
    《C#并发编程经典实例》学习笔记—异步编程关键字 Async和Await
  • 原文地址:https://www.cnblogs.com/hankfu/p/15668460.html
Copyright © 2020-2023  润新知