OpenCV3.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


Posted by Kugi
,