2009년 6월 24일 수요일

[펌] FFMPEG 를 minGW에서 빌드하고, MSVC에서 사용하는것

출처 : http://jayhouse.egloos.com/1909473


최신 FFMPEG을 SVN으로 다운받습니다.

MSYS, minGW를 설치해야 합니다. 다음 링크에 가면 자세한 설명과 다운 받아야 할 파일이 있습니다.

http://arrozcru.no-ip.org/ffmpeg_wiki/tiki-index.php

MSYS 설치

1.MSYS-1.0.11-2004.04.30-1.exe
2.MSYS-1.0.11-20071204.tar.bz2
3.bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
4.coreutils
5.make-3.81-MSYS-1.0.11-2.tar.bz2
6.Fixing "msys.bat"

MinGW 설치
binutils-2.18.50-20080109.tar.gz
gcc-core-4.2.1-sjlj-2.tar.gz
gcc-g++-4.2.1-sjlj-2.tar.gz
mingw-runtime-3.14.tar.gz and patch file
w32api-3.11.tar.gz

MinGW 파일 전부 설치후 패치를 꼭 해주셔야 합니다.파일 몇개 없다고 빌드가 안되거나 MSVC에서 링크가 되는데 문제가 생길수도 있습니다.

특히 gcc의 3.XX 버전으로 빌드를 하시면 MSVC에서 힙메모리를 잡다가 죽더군요파일들을 C:\msys\mingw 에 압축풀고
C:\msys\etc\fstab.sample
파일을 사본 복사하여 fstab로 이름을 바꿉니다.
c:/mingw /mingw
의 내용을
c:/msys/mingw /mingw
와 같이 수정하여 저장합니다

C:\msys 폴더에 msys.bat 파일이 있습니다.
맨 윗부분에
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT" 요렇게 수정을 합니다. 물론 경로 맞춰서

=====================================================================================
MSYS 와 MinGW를 설치 했으면 이제 ffmpeg-0.4.9를 다운받습니다. 검색엔진에 검색하면 쉽게 나옵니다.
msys 를 실행하고 프롬프트 창에서 빌드를 하면 됩니다.linux 스타일 명령입니다.
ffmpeg가 설치되어 있는 폴더로 이동후
./configure --enable-memalign-hack
를 치면 config.h 파일이 생성 됩니다

. dll로 만들어서 하는 부분에서 저도 lib 명령이 안먹혀서 실패했습니다.

아는분 알려주세요 ^^그래서 저는 그냥 static lib로 만들어서 사용했습니다

.make하면 빌드가 되죠.
에러가 발생하면 뭔가 빠진 것일 겁니다.
저도 하고나서 쓰는거라..^^;;

이제 빌드가 되면
make install
을 합니다.
그럼 중요한 파일들이 msys/local 밑으로 복사됩니다.avcodec.a, avcodec.a, avformat.a, avformat.a 등 이 생성 됐을 겁니다.

이름이 다를수도 있습니다.

ffmpeg의 루트 폴더에보면 output_example.c라는 파일이 있습니다.

MSVC에서 빌드하도록 환경을 맞춰줘야 합니다.

win32 console 프로젝트를 만듭니다. precompiled header는 사용하지 않도록 합니다.

파일은 .c로 해야합니다. cpp로하면 ffmpeg이 제대로 빌드 되지 않습니다.

property page에서 C/C++ 페이지의 additional include directories에서복사된 폴더에서 include를 지정해 줍니다.linker의 general 페이지에서 additional library directories에서libavcodec폴더와 libavformat폴더를 마찮가지로 추가합니다.

또 msys가 설치되어 있는 폴더 중에서
C:\msys\mingw\lib; C:\msys\mingw\lib\gcc\mingw32\3.4.5;

다음과 같이 두 경로를 추가합니다.(경로 자기 경로에 맞춰서 해주셔야 합니다.)

linker input 페이지에서avformat.a avcodec.a avutil.a libgcc.a libmingwex.a파일을 추가하여 링크시킵니다.

빌드를 누르시면 당연히 에러가 발생하겟죠... 처음에 한번에 되면 운 좋으신것입니다.

inline에 관련된 에러는 MSVC같은경우 inline을 __inline으로 해야 되는 경우가 있습니다.다른곳에서는 그냥 inline도 되는데 왜 여기서만 __inline으로 해야 되는지 잘 모르겠습니다.

그냥 #define inline __inline 으로 만들으셔서 오류나는 파일 꼭대기에 한군대만 넣으셔도 됩니다.common.h 같은 곳에그밖에 수정할 사항은 링크에 보시면 있습니다.자세한 사항은 나중에 업데이트 하도록 하겠습니다.

- revision history 2008.07.30 최초 작성 2008.07.31 빌드성공, 비디오 플레이어 제작 성공

댓글 없음: