본문 바로가기
코드

Windows Platform SDK의 DirectShow 샘플 컴파일하기

by ehei 2006. 9. 29.

※ 내 방식은 너무 무식하다. DirectShow가 아닌 다른 샘플또한 모두 makefile을 고쳐야하는 것이다! 그러나 같이 공부하는 학우가 더 쉽고 빠른 방법을 찾았다. http://blog.daum.net/idzuno/6037863

 

 

사용된 SDK: Microsoft Platform SDK for Windows Server 2003 R2

 

Samples\Multimedia\DirectShow 에 있는 샘플들은 정적 라이브러리와 헤더 파일의 경로가 지정되어 있지 않아 컴파일되지 않는다.

 

이걸 컴파일하려면 다음과 같이 진행한다.

 

1. 환경 변수를 추가한다.

 

변수는 MSSDK로 한다. 아래의 수정된 makefile 을 받아 사용하려면 반드시 이 이름을 써야한다. 값은 SDK가 설치된 폴더로 한다(예: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2)

 

 

2. 아래 파일을 다운받아 압축을 풀고, 폴더 그대로 겹쳐쓰기한다. 직접 수정하고 싶으면, 좀더 아래를 보자.

 

[다운로드 DirectShow_makefile_fixed.zip ]

 

 

3. 이제 컴파일을 하자. IDE로는 컴파일할 수 없다. Visual Studio 2005 Comand Prompt 를 실행하자. 시작 메뉴에서 VS를 찾자. Tools에 있으니 선택하자. 콘솔 창이 뜨면 ...\Samples\Multimedia\DirectShow 로 가서 nmake 를 실행하면 죄다 컴파일을 시작한다.

 

 

 

※ 직접 수정하기

 

 

1. 아래의 makefile 을 보자. lib를 생성하는 부분에는 /LIBPATH ... 를, obj를 생성하는 부분에는 /I ... 추가한다. 빨간 글씨가 정상적으로 컴파일되기 위해 추가되어야할 것 들이다. 어떤 것들은 리소스 파일을 컴파일 하기 위해서도 헤더 파일 경로 추가가 필요하므로 주의. 좀 짜증나는 점은 make 파일들이 삼십개가 넘고, 죄다 이걸 추가해줘야한다는 점이다... 직접 하는 것도 좋다. 나는 지루해서 혼났지만...

 

[ makefile in BaseClassed ]

all: $(OUTDIR) $(OUTDIR)\$(STRMBASE).lib

 

$(OUTDIR)\$(STRMBASE).lib:   $(LINK32_OBJS)
 $(link) -lib /OUT:$(OUTDIR)\$(STRMBASE).lib /MACHINE:$(CPU) /NODEFAULTLIB $(LINK32_OBJS) strmiids.lib /LIBPATH:"$(MSSDK)\lib"

 

$(OUTDIR)\amextra.obj:
 $(cc) $(cflags) $(cdebug) $(cvarsmt) /EHsc /Yc"streams.h" /Fp$(OUTDIR)\streams.pch /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\" /D_MBCS /I "." /I"$(DXSDK_DIR)\Include" /D_LIB /D_WIN32_DCOM  amextra.cpp /I"$(MSSDK)\Include"

 

.cpp{$(OUTDIR)}.obj:
 $(cc) $(cflags) $(cdebug) $(cvarsmt) /EHsc /Yu"streams.h" /Fp$(OUTDIR)\streams.pch /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\" /D_MBCS /I "." /I"$(PLATFORMSDK_DIR)\Include" /I"$(DXSDK_DIR)\Include" /D_LIB /D_WIN32_DCOM  $** /I"$(MSSDK)\Include"

 

 

2. 이게 끝이 아니다. 아래의 폴더로 가자.

\Samples\Multimedia\DirectShow\Filters\RGBFilters\RateSource

여기에 ratestream.cpp 이 있는데, 변수 y가 지정되지 않은 채 쓰여 오류가 발생한다. 줄 382, 387로 가면 다음과 같은 구문이 있다.

 

for( y = 0 ; ... )

 

y 앞에 int를 붙여주자. 자, 이제 컴파일


'코드' 카테고리의 다른 글

easyVNC 프로토타입  (0) 2006.10.18
OpenTNL API를 이용하여 메모리 데이터 전송하기  (0) 2006.10.04
prototype for CxImage library  (0) 2006.09.18
Inno Setup 5 Script  (0) 2006.09.09
CQ 빌더  (0) 2006.08.01