Configure and Build OpenCV to Custom FFMPEG Install

前端 未结 4 1180
梦毁少年i
梦毁少年i 2021-02-05 16:37

I cannot seem to configure OpenCV to link to a non-/usr/lib set of FFMPEG libraries.

My LD_LIBRARY_PATH contains a direct link to the folder for the custom

4条回答
  •  梦谈多话
    2021-02-05 17:02

    It's years after the question was asked, but I recently ran into the kinds of issues described in this question! I'd like to add my input.

    First: I only built the static ffmpeg libraries (for reasons), which the opencv build process is somewhat hostile towards. There have been posts by opencv developers stating that they don't support an opencv build against static ffmpeg libraries, but my thinking was "what if you're also building static opencv libraries? Certainly that should be supported?"

    And the answer is yes, you can compile static opencv libraries against static ffmpeg libraries! I did this with opencv 4.1.1 against ffmpeg 4.2. I had to use the following cmake options:

    cmake3 \
    -D BUILD_opencv_apps=OFF \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_SHARED_LIBS=OFF \
    -D WITH_FFMPEG=ON \
    -D OPENCV_FFMPEG_SKIP_BUILD_CHECK=ON \
    

    These options result in a set of opencv static libraries that include whatever ffmpeg static libraries that you've also built, assuming your PKG_CONFIG_PATH is setup to correctly find those libraries (or if you've installed them to some default system location).

    Q/A:

    • Why can't we build apps?
      • The opencv build process assumes that you are building and linking against shared libraries, even if you only build static libraries. This seems like a shortcoming in the build process rather than a technical limitation; perhaps some day this will be fixed.
    • What is the OPENCV_FFMPEG_SKIP_BUILD_CHECK flag?
      • There is a step in ffmpeg's cmake process where an application is built and linked using the same faulty build process as opencv's other applications. It's faulty in the sense that the process assumes that you're linking against shared libraries when it doesn't need to; you can perform the same build steps yourself while not making that assumption and create a working application. Thus, this build check needs to be turned off in order for opencv to accept that yes, in fact, any static libraries it finds are okay to use. This is
    • And why do you disable python support?
      • The opencv python build process explicitly produces a shared library loadable by Python.
    • Does this imply that you're still building the tests suite even with the static libraries?
      • Yes. But I haven't tried running them

提交回复
热议问题