DirectShow 관련해서는 프로젝트 환경을 깔끔하게 세팅하기가 참 어려운 것 같다. 지난 번에는 Visual Studio 6.0에서 DirectShow 컴파일할 때 했던 삽질 얘기였는데 이번에는 VS 2005다.
DirectShow 필터를 만들려면 샘플 프로젝트 중에서 BaseClasses 프로젝트를 컴파일해서 strmbase.lib 를 만들어야 하는데, 주어진 상황에서 뭔가 쉽게 잘 안되는 문제가 있었다.
주어진 상황은
- Visual Studio 2005
- Windows Server 2003 SP1 Platform SDK
- DirectX SDK 9.0
2003 SP1 Platform SDK 에서는 DirectShow가 PSDK 쪽으로 옮겨졌다. 그리고 BaseClasses 프로젝트가 솔루션 파일을 갖고 있지 않다. 그래서 nmake 를 가지고 컴파일을 해야한다.
어쨌거나 컴파일을 하면 뭔가 잔뜩 에러가 나온다. VC++ 8의 변경 사항 중에, for 문의 시작 조건 부분에서 선언한 변수의 범위가 for 블럭만으로 제한되도록 바뀐 것 때문에 이런 에러가 나는 것으로 확인되었다.
그렇다면 Makefile을 수정하여 컴파일 옵션을 변경해야 한다. 간단히 Makefile을 열고 컴파일 명령이 있는 부분에 /Zc:forScope- 라는 옵션을 추가하면 된다.
한 고비 넘었다. 그리고 다시 컴파일을 하면 에러 갯수가 확 줄어드는 것을 볼 수 있었다. 남은 에러를 보면 대강 '타입이 지정되지 않았는데, 이제는 int 라고 가정해버리는 짓따위는 하지 않아' 정도의 변명이었다.
몇 군데 함수 리턴 타입이 지정되지 않은 곳에서 에러가 발생하는 것인데 이건 별도로 옵션이 있는게 아니라서 소스를 직접 고쳐야 한다. 주변 소스에 맞게 적절히 타입을 선언해주고 다시 컴파일하면 성공!
사실 그냥 다음 버전인 Windows Server 2003 R2 Platform SDK 만 깔아도 문제가 해결된다고 하는데, PSDK를 또 까는게 귀찮아서 이런 삽질을 했다. -_-;