Настройка и сборка OpenCV для установки пользовательского FFMPEG
Похоже, я не могу настроить OpenCV для связи с набором библиотек FFMPEG, отличным от/usr/lib.
Мой LD_LIBRARY_PATH содержит прямую ссылку на папку для пользовательской установки FFMPEG:
LD_LIBRARY_PATH=/pathto/ffmpeg-0.10.2/lib
Кроме того, я настроил pkgconfig следующим образом:
PKG_CONFIG_PATH=/samepathto/ffmpeg-0.10.2/lib/pkgconfig/
Однако в CMake я не могу найти никакой настройки для пути к FFMPEG-ни в basic, ни в custom. Единственным параметром, связанным с FFMPEG, является WITH_FFMPEG type setting (set to ON).
Я могу строить OpenCV, но он, похоже, связан с системными библиотеками для libavcodec - это вызывает конфликт, поскольку системные библиотеки являются версиями .52 и версия в моей установке FFMPEG есть .53. Связывание приложения на машине без одинаковых системных библиотек, похоже, не связано с моей пользовательской установкой OpenCV (в частности, libavcodec) из-за этого (я устанавливаю эти библиотеки в общую сетевую папку).
Я не уверен, что моя проблема заключается в создании и связывании с неправильной версией FFMPEG или если это что-то с моей средой после сборки (а затем связывание с неправильным ffmpeg).
Я строю на Linux, Redhat 6, OpenCV 2.3.1.
2 ответов:
Что-то вроде
export LD_LIBRARY_PATH=/ffmpeg_install_path/lib/ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/ffmpeg_install_path/lib/pkgconfig export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/ffmpeg_install_path/lib/Должно сработать. По крайней мере, это работает для OpenCV 2.4.x на моем Ubuntu.
Для OpenCV 3.x и ffmpeg 3.x, я должен применить следующий патч
diff --git a/cmake/OpenCVFindLibsVideo.cmake b/cmake/OpenCVFindLibsVideo.cmake index 13b62ac..bab9df3 100644 --- a/cmake/OpenCVFindLibsVideo.cmake +++ b/cmake/OpenCVFindLibsVideo.cmake @@ -228,6 +228,12 @@ if(WITH_FFMPEG) if(FFMPEG_libavresample_FOUND) ocv_append_build_options(FFMPEG FFMPEG_libavresample) endif() + CHECK_MODULE(libavcodec HAVE_FFMPEG) + CHECK_MODULE(libavformat HAVE_FFMPEG) + CHECK_MODULE(libavutil HAVE_FFMPEG) + CHECK_MODULE(libswscale HAVE_FFMPEG) + CHECK_MODULE(libswresample HAVE_FFMPEG) + CHECK_MODULE(libavresample HAVE_FFMPEG) if(HAVE_FFMPEG) try_compile(__VALID_FFMPEG "${OpenCV_BINARY_DIR}"И с помощью следующего скрипта построить
#!/bin/bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/Applications/ffmpeg/lib export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/Applications/ffmpeg/lib/pkgconfig export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:$HOME/Applications/ffmpeg/lib cmake \ -D BUILD_EXAMPLES=ON \ -D BUILD_TESTS=OFF \ -D OPENCV_EXTRA_EXE_LINKER_FLAGS="-Wl,-rpath,$HOME/Applications/ffmpeg/lib" \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=$HOME/Applications/opencv \ /path/to/opencvКроме того, при сборке ffmpeg я должен включить флаги
--enable-avresample.
Comments