Sudah bertahun-tahun setelah pertanyaan diajukan, tetapi saya baru-baru ini menemukan jenis masalah yang dijelaskan dalam pertanyaan ini! Saya ingin menambahkan masukan saya.
Pertama:Saya hanya membangun pustaka ffmpeg statis (karena alasan), yang agak dimusuhi oleh proses pembangunan opencv. Ada posting oleh pengembang opencv yang menyatakan bahwa mereka tidak mendukung build opencv terhadap pustaka ffmpeg statis, tetapi pemikiran saya adalah "bagaimana jika Anda juga membuat pustaka opencv statis? Tentu saja itu harus didukung?"
Dan jawabannya adalah ya , Anda dapat mengkompilasi pustaka opencv statis terhadap pustaka ffmpeg statis! Saya melakukan ini dengan opencv 4.1.1 melawan ffmpeg 4.2. Saya harus menggunakan opsi cmake berikut:
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 \
Opsi ini menghasilkan sekumpulan pustaka statis opencv yang menyertakan pustaka statis ffmpeg apa pun yang telah Anda buat, dengan asumsi PKG_CONFIG_PATH Anda disetel untuk menemukan pustaka tersebut dengan benar (atau jika Anda telah memasangnya ke beberapa lokasi sistem default).
Tanya Jawab:
- Mengapa kami tidak dapat membuat aplikasi?
- Proses build opencv mengasumsikan bahwa Anda sedang membangun dan menautkan ke pustaka bersama, bahkan jika Anda hanya membangun pustaka statis. Ini sepertinya kekurangan dalam proses pembuatan daripada batasan teknis; mungkin suatu hari ini akan diperbaiki.
- Apa bendera OPENCV_FFMPEG_SKIP_BUILD_CHECK?
- Ada langkah dalam proses cmake ffmpeg di mana aplikasi dibuat dan ditautkan menggunakan proses pembuatan yang salah sama seperti aplikasi opencv lainnya. Itu salah dalam arti bahwa prosesnya mengasumsikan bahwa Anda menautkan ke perpustakaan bersama ketika tidak perlu; Anda dapat melakukan sendiri langkah-langkah pembangunan yang sama sementara tidak membuat asumsi itu dan membuat aplikasi yang berfungsi. Oleh karena itu, pemeriksaan build ini perlu dimatikan agar opencv dapat menerima bahwa ya, sebenarnya, pustaka statis apa pun yang ditemukan boleh digunakan. Ini
- Dan mengapa Anda menonaktifkan dukungan python?
- Proses build opencv python secara eksplisit menghasilkan pustaka bersama yang dapat dimuat oleh Python.
- Apakah ini menyiratkan bahwa Anda masih membuat rangkaian pengujian bahkan dengan pustaka statis?
- Ya. Tapi saya belum mencoba menjalankannya
Sesuatu seperti
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/
harus bekerja. Setidaknya ini berfungsi untuk OpenCV 2.4.x di Ubuntu saya.
Untuk OpenCV 3.x dan ffmpeg 3.x, saya harus menerapkan tambalan berikut
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}"
Dan dengan skrip berikut untuk dibuat
#!/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
Juga, ketika membangun ffmpeg, saya harus mengaktifkan flag --enable-avresample
.