■ libmingwex(.a 또는 .lib)의 정체에 관한 내용
GCC (GNU Compiler Collection)는 다양한 프로그램 언어의 컴파일을 지원하는 컴파일러 시스템이며, 특히 C와 C++의 컴파일에 활용될 수 있습니다. 리눅스나 FreeBSD 등의 유닉스 계열 OS에서 매우 광범위하게 사용되어 오면서 뛰어난 성능을 검증받았습니다.
윈도의 경우, cygwin과 MinGW가 윈도로 포팅된 gcc의 양대산맥이라고 할 수 있는데, 둘의 성격은 꽤 다른 편입니다. cygwin의 경우 윈도에서 리눅스 환경을 느끼면서 코딩할 수 있도록 배려한 라이브러리가 포함되어 있으며, 주로 유닉스 계열에서 쓰이는 POSIX API 집합을 지원합니다. 따라서 cygwin으로 컴파일된 프로그램을 실행하기 위해서는 별도의 라이브러리(cygwin1.dll)가 필요합니다. (cygwin이 GPL 라이센스를 따르므로 라이브러리 사용시 일부 라이센스 문제가 있을 수 있습니다.)
한편 MinGW의 경우 MS에서 제공하는 C 런타임 라이브러리(msvcrt)를 기반으로 동작합니다. 따라서 cygwin과 달리 런타임 라이브러리는 필요하지 않으나, msvcrt가 C99의 기능들을 지원하지 않는 관계로 libmingwex라는 추가 라이브러리를 통해 해당 부분에 대한 지원을 시도하는 중입니다. (출처) 해당 문제점은 MinGW에서 갈라져 나온 새로운 가지인 MinGW-w64에서 해결되었는데, C99의 기능 뿐만 아니라 더 다양한 API, 64비트 윈도우 등에 대한 지원이 추가되었으며, 32비트용 컴파일 또한 지원합니다.
결론적으로, 기존에 리눅스 환경에서 실행되던 프로그램을 윈도로 포팅하는 경우에는 cygwin을 사용하고, 일반적인 윈도용 어플리케이션을 개발하기 위한 범용 컴파일러는 MinGW-w64를 사용하는 것이 좋을것 같습니다.
<출처 - http://jscript.blog.me/220084163392>
■ LINK 에러 처리 관련 내용
추가로 다음 라이브러리도 포함시킨다. (해당 라이브러리는 MinGW 의 lib 폴더에 있다)
#pragma comment (lib, "../ffmpeg_output/libgcc.a")
#pragma comment (lib, "../ffmpeg_output/libmingwex.a")
그런데 이렇게 한 후 컴파일하면 다음과 같은 에러가 발생한다.
libmingwex.a(wcrtomb.o) : error LNK2001: __imp____lc_codepage 외부 기호를 확인할 수 없습니다.
libmingwex.a(mbrtowc.o) : error LNK2001: __imp____lc_codepage 외부 기호를 확인할 수 없습니다.
즉, libmingwex.a 라이브러리가 문제인 것이다.
이에 대한 해결 방안은 다음과 같다.
1. 시작 > 실행 > cmd
2. ligmingwex.a 라이브러리가 있는 위치로 이동
3. lib -remove:mbrtowc.o libmingwex.a
=> 이러면 해당 폴더에 libmingwex.lib 가 생긴다.
4. lib -remove:wcrtomb.o libmingwex.lib
이 후
#pragma comment (lib, "../ffmpeg_output/libmingwex.a") 이를
#pragma comment (lib, "../ffmpeg_output/libmingwex.lib") 로 변경한 후 컴파일 수행
해결 완료!
'ffmpeg' 카테고리의 다른 글
ffmpeg 32bit windows build (MSYS 1.0, MinGW-w64 사용) (0) | 2016.04.22 |
---|---|
ffmpeg 64bit windows build. (MSYS 1.0, MinGW-w64 사용) (0) | 2016.04.21 |