OpenCV3.0.0 - Static Library (Release) Application : Video Open Failed.
Development/Failure Log 2015. 7. 22. 15:11OpenCV3.0.0 정적 라이브러리(Static Library)를 사용하도록 하여 release 모드로 빌드한 영상처리 어플리케이션을 내 컴퓨터가 아닌 다른 PC에서 테스트해봤는데
프로그램 실행까지는 정상적으로 되었는데 비디오 파일(.mp4)을 열려고 하면 실패하였다. 파일 경로의 문제는 아니었는데 코덱 문제일까 싶어서 좀 찾아봤더니
(http://answers.opencv.org/question/56519/opencv-24-static-lib-relies-on-opencv_ffmpegdll-on-windows/)
FFMPEG 라이브러리 때문에 생기는 문제였다.
FFMPEG 라이브러리는 GPL 라이선스를 적용받기 때문에 이 라이브러리를 정적으로 포함하도록 빌드할 경우 모든 소스코드가 똑같이 GPL 라이선스를 적용받아야 한다.
때문에 BSD 라이선스를 적용한 OpenCV는 이 FFMPEG 라이브러리를 동적으로 연결해서 사용하도록(DLL) 되어있다.
즉, 내가 다른 PC에서 테스트할 때 FFMPEG 라이브러리는 설치하지 않았기 때문에 비디오 파일을 열 때 실패하게 된 것이다.
release 된 .exe 파일과 같은 경로에 opencv_ffmpeg300.dll 파일을 넣어주었더니 제대로 비디오 파일을 여는 데 성공했다.
opencv_ffmpeg300.dll 파일은 다음과 같이 OpenCV bin 폴더 내에 들어있다.
참고로 OpenCV를 정적으로 빌드하기 위해서는 추가 종속성(Additional Dependencies)에 OpenCV의 staticlib 내의 라이브러리 파일들 뿐만 아니라
다음과 같은 추가적인 라이브러리 파일 입력이 필요하다. (x86 시스템 기반 기준)
- comctl32.lib
- vfw32.lib
개발환경은 Windows 8.1 Pro K, Visual Studio 2013 Professional 이며 C++를 사용했다.
테스트했던 PC는 Windows 7 Enterprise이다.
나중에 편리하게 사용하기 위해 전체 입력을 여기에 기록했다.
comctl32.lib
vfw32.lib
IlmImf.lib
ippicvmt.lib
libjasper.lib
libjpeg.lib
libpng.lib
libtiff.lib
libwebp.lib
opencv_calib3d300.lib
opencv_core300.lib
opencv_features2d300.lib
opencv_flann300.lib
opencv_hal300.lib
opencv_highgui300.lib
opencv_imgcodecs300.lib
opencv_imgproc300.lib
opencv_ml300.lib
opencv_objdetect300.lib
opencv_photo300.lib
opencv_shape300.lib
opencv_stitching300.lib
opencv_superres300.lib
opencv_ts300.lib
opencv_video300.lib
opencv_videoio300.lib
opencv_videostab300.lib
zlib.lib