:: 세상의 중심 ::

간만에 오래된 소스를 꺼내서 컴파일하려다보니...
생전 처음 보는 에러에 부딪혔다..

프로그래밍 하다가 본거였다면, 어디가 잘못됐는지 찾느라 한참 걸렸겠지만..
컴파일하려단 소스는 예전에 완전히 동작하던 소스라서 버전차이 때문에 생기는 문제라는 것을 직감했다.

여기서 부딪히는 문제는 C1902와 PRJ0003 이었으며, 생각보다 간단하게 해결할 수 있었다.

1. C1902 Error

VS2003이나 그 이전버전에서 C/C++ 로 작성된 프로젝트는 VS2008에 와서 컴파일을 다시하려고 하면,
이상한 헤더파일에서 아래와 같은 에러메시지가 뜨는 것을 볼 수 있다.

C1902: Program database manager mismatch; please check your installation

원인은 mspdbXX.dll 파일로 프로그램 데이터베이스 파일(.pdb)을 만드는 과정에서 버전이 맞지 않아서 발생한다.
XX는 버전이 들어가는 자리이며, 이를 해결하기 위해서는 맞는 버전을 참조하도록 설정을 바꿔야 하지만,
간단하게 mspdb80.dll 이 있는 곳에 mspdb80.dll 파일을 참조못하도록 바꿈으로써 이 문제를 해결할 수 있다.

C:\ProgramFiles\Microsoft Visual Studio 8\VC\bin 에 가면 mspdb80.dll 이 있으며, 이 파일의 이름을 다른 이름으로 바꾼 후 컴파일 하면 정상적으로 실행되는 것을 확인할 수 있다.


2. PRJ0003 Error (mt.exe)

실행이 된 다음에도 링킹에서 mt.exe 를 실행할 수 없다는 에러메시지가 뜨는 것을 볼 수 있다.
VS2008로 오면서 새로 도입된 것이 메니페스트라는 것이 있는데,
VS2008에서 컴파일할 때 기본적으로 메니페스트를 만들어주는 mt.exe를 찾게 된다.

그래서 이전 프로젝트에서는 mt.exe가 존재하지 않기 때문에 에러를 뱉어내는 것이다.
이를 해결하기 위해서는 아래의 mt.exe를 해당 프로젝트 디렉토리에 넣어주면 된다.

Posted by bsh