libmingwex 관련 내용

ffmpeg 2016. 5. 12. 13:32


■ 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") 로 변경한 후 컴파일 수행

 

해결 완료!

<출처 - http://blog.naver.com/ziippy/120138415791>

Posted by 아..몰라 ㅡ.ㅡ+
,

※ Windows 10 x64에서 boost C++ library를 VisualStudio에서 사용하기 위해 32bit / 64bit 빌드하는 내용



유명한 C++ 라이브러리인 boost를 사용해보자.

◎ 공식 사이트 : http://www.boost.org/


1. 소스 다운로드

공식 사이트 대문에 "DOWNLOADS"라고 있다.

"Download"를 클릭하면 sourceforge.net의 다운로드 페이지로 이동한다.

(현 시점에 공식 최신 버전은 1.60)


2.로컬에 압축해제

D드라이브에 압축해제한다고 가정하자. "D:\boost"에  압축을 풀면

"D:\boost\boost_1_60_0" 이렇게 된다.


3. Visual studio 명령 프롬프트 실행

VS2013으로 예를 들자면 프로그램 목록에서 "Visual Studio 2013" > "Visual Studio Tools" 에 가보면 몇 가지 명령 프롬프트가 있다.

x64 명령 프롬프트에서도 x86 빌드가 가능하므로 "VS2013 x64 네이티브 도구 명령 프롬프트"를 선택하자.



4. "bootstrap.bat" 실행

로컬에 압축해제한 경로("D:\boost\boost_1_60_0")로 이동.

"bootstrap.bat"라는 배치파일을 실행하면

"b2.exe", "bjam.exe"라는 파일이 생성됨



5. "b2.exe"를 이용한 실제 빌드

4번 과정에서 생성된 "b2.exe"를 통해서 실제 빌드를 수행한다.

도움말 보기는 "b2.exe --help".


※ 주의사항 : 만약 PC에 visual studio가 2010,2012,2013,2015가 있다고 가정하고 "Visual Studio 2013 명령 프롬프트"를 통해 빌드할 경우 toolset 옵션을 설정하지 않으면 예상과 다르게 VS2015용 lib가 생성된다. 

※ visual studio 버전 숫자

- VS2008 : 9.0

- VS2010 : 10.0

- VS2012 : 11.0

- VS2013 : 12.0

- VS2015 : 14.0


■ 32bit (x86) 빌드 커맨드 예시 (for 2013)

b2 --toolset=msvc-12.0 variant=debug,release address-model=32 threading=single,multi runtime-link=static,shared


■ 64bit (x64) 빌드 커맨드 예시 (for 2013)

b2 --toolset=msvc-12.0 variant=debug,release address-model=64 threading=single,multi runtime-link=static,shared



※  직접 빌드하기 싫다면

https://sourceforge.net/projects/boost/files/boost-binaries/ 에 가면 boost 버전별로 vs 버전별로 빌드된 결과물 설치 파일이 있다.

Posted by 아..몰라 ㅡ.ㅡ+
,

※ 본글은 Windows 10 64bit에서 MSYS 1.0, MinGW 32bit를 이용한 ffmpeg 3.0.1 버전을 32bit build 과정을 다룹니다. 

( 2016-04-22 )


※ build 결과를 이용해서 IP카메라에서 H.264로 streaming 되는 것을 정상적으로 decoding 및 display하는 것 까지 확인.

가지고 있는 영상처리 모듈 중에 가장 부하가 큰 것이 32bit OpenCV로 되어 있어서 ffmpeg 32bit 도 build 해보기로 함.



1. https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/ 에 가서 MSYS 다운받고 D:\msys_x86에 압축 해제


2. https://sourceforge.net/projects/mingw-w64/ 에 가서 mingw-w64-install.exe 다운받고 실행


3. next 선택




4. Setting - 여기서는 선택이 갈림. 일단 32bit가 목적이니 일단 Architecture는 i686을 선택하고


1) Thread를 posix 로 선택하는 경우


2) thread를 win32로 선택하는 경우



2가지 경우는 다음과정에서 configure 과정과 결과물 사용 과정이 다름.

posix를 선택하는 경우에는 DLL 사용 시점에 " libwinpthread-1.dll "이라는 파일을 필요로함. 아직까지 그 부분을 회피하는 방법은 모름.


5. next를 막 눌러서 설치를 끝냄.


6. 방금 설치한 MinGW를 MSYS하위 경로로 복사.(windows에 환경변수를 등록하고 써도 되겠지만.)

- 위 과정대로 설치했다면 C:\Program Files (x86)\mingw-w64 경로에

"i686-5.3.0-posix-dwarf-rt_v4-rev0" 또는 "i686-5.3.0-win32-dwarf-rt_v4-rev0" 라는 폴더가 있을 것임. 

그 폴더 하위에 있는 "mingw32"라는 폴더를 MSYS에 복사.

ex) " D:\msys_x86\mingw32  " 이런 식으로



7.  yasm 설치

http://yasm.tortall.net/Download.html 에 가서 win32.exe 링크를 눌러서 다운로드.

실제로는 "yasm-1.3.0-win32.exe" 이름으로 다운로드 됨.

이름을 "yasm.exe"로 바꿔주고 mingw의 bin 폴더에 복사

ex) D:\msys_x86\mingw32\bin 에 yasm.exe로 복사


8. msys 실행

- msys.bat 실행


9. 터미널에서 PATH 추가

-터미널에서 다음과 같이 입력

echo 'export PATH=.:/local/bin:/bin:/mingw32/bin' > .profile

echo 'git config --global core.autocrlf false' >> .profile

source .profile


10. ffmpeg 소스를 다운로드

- ffmpeg 소스를 다운로드해서 D:\msys_86\home 아래에 설치하자


https://www.ffmpeg.org/download.html

최신 소스를 쓸려면 git으로 받고(좌측 상단), Release버전을 사용할려면 하단 Release 부분에 있는 Release 압축 파일을 다운받아서 사용


11. ffmpeg 경로로 가서 configure 진행.  (아래 예시는 LPGL 3.0 사용, 외부 라이브러리 없음)


11-1)  MinGW 설치시 thread를 posix로 선택한 경우

./configure --arch=x86 --enable-stripping --disable-w32threads --enable-memalign-hack --disable-static --enable-shared --enable-version3 --disable-doc --extra-ldflags=" -static-libgcc -static-libstdc++ "


11-2)  MinGW 설치시 thread를 win32로 선택한 경우

./configure --arch=x86 --enable-stripping --enable-memalign-hack --disable-static --enable-shared --enable-version3 --disable-doc --extra-ldflags=" -static-libgcc -static-libstdc++ "


12. make


13. DLL 사용 시

13-1)  MinGW 설치시 thread를 posix로 선택한 경우

ex) D:\msys_x86\mingw32\bin 에 있는 "libwinpthread-1.dll "라는 파일을 ffmpeg DLL이 있는 경로에 복사해서 사용.


13-2)  MinGW 설치시 thread를 win32로 선택한 경우

그냥 원래 처럼 DLL 사용



끗.


<출처 - 본인>



'ffmpeg' 카테고리의 다른 글

libmingwex 관련 내용  (0) 2016.05.12
ffmpeg 64bit windows build. (MSYS 1.0, MinGW-w64 사용)  (0) 2016.04.21
Posted by 아..몰라 ㅡ.ㅡ+
,