FFmpeg library build for Windows2

gcc를 이용하여 윈도우즈용 FFmpeg 라이브러리를 빌드 해본다.
구버전의 DLL과 라이브러리 파일이 필요하면 직접 빌드 해야 한다.

빌드 환경

windows : windows 8.1 64bit
ffmpeg: 3.2.2
msys2: msys2-x86_64-20161025.exe


다운로드

ffmpeg: https://github.com/FFmpeg/FFmpeg
msys2: http://www.msys2.org/

MSYS2 패키지 업데이트

64비트용인 msys2-x86_64-20161025.exe 파일을 다운로드 받아서 설치 한다.
설치시 폴더는 D:\msys64로 지정하였다.

msys 컴맨드 창이 자동 실행되면 패키지를 업데이트 한다.

pacman -Syuu

msys 컴맨드 창을 닫고 msys2_shell.cmd로 컴맨드 창을 다시 실행한다.
다음의 패키지도 설치한다.

pacman -S make
pacman -S diffutils
pacman -S yasm
pacman -S mingw-w64-i686-gcc

gcc용는 32비트를 타겟으로 설치한다.
        - 64비트용 : mingw-w64-x86_64-gcc
        - 32비트용 : mingw-w64-i686-gcc

빌드

1. MSYS 실행

32bit 실행
D:\msys64\msys2_shell.cmd -mingw32

64bit 실행
D:\msys64\msys2_shell.cmd -mingw64

2. ffmpeg 복사

ffmpeg 폴더를 "D:\msys64\home\[사용자]" 폴더로 복사한다.

3. make 만들기

--enable-shared : DLL을 만들기 위해 지정한다.

mkdir out
cd out
../ffmpeg/configure --enable-shared

3. config.mak 수정

config.mak가 생성되면 다음의 워닝은 무시한다.
WARNING: pkg-config not found, library detection may fail.

이 상태에서 빌드하면 빌드는 문제없이 되지만 mingw32 전용이라 윈도우즈용으로 실행이 안된다.
EXTRALIBS에 다음 사항을 추가한다.

out/config.mak 파일의 EXTRALIBS에 -static-libgcc -Wl,-Bstatic -lpthread -Wl,-Bdynamic 추가
EXTRALIBS=-static-libgcc -Wl,-Bstatic -lpthread -Wl,-Bdynamic -lws2_32 -lavicap32 -lgdi32

8. make 실행

make
make install

9. DLL 확인

gcc로 빌드하면 out/bin 폴더가 생성되지 않기 때문에 lib, dll 파일이 복사 되지 않는다.
각각의 폴더에서 lib 파일과 dll 파일을 확인해야 한다.

DLL의 의존성을 확인한다.
dumpbin -dependents bin/avcodec-57.dll

다른 DLL의 어떤 함수를 호출하는지 확인한다.
dumpbin -imports bin/avcodec-57.dll

export 하는 함수를 확인한다.
dumpbin -exports bin/avcodec-57.dll

참조)
http://qiita.com/omochimetaru/items/35df0524594255354885#msys2mingw32
https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC