회사에서 작업으로 받은 컴퓨터가 더 이상 작업하는데 인내심을 요구해서
(팬4 RAM 2GB ... ㅡㅡ... 아무리 장인은 연장탓을 안한다곤 하지만.. 기획자들은 i7에 ssd 보급해주면서 참... )
현재 안쓰는 테스팅 컴퓨터가 굴러다니길래 (쿼드Q8300 RAM 5GB) 여기에
윈7 64bit 를 설치하고, 가능한 최신 컴파일러의 힘을 보고싶어서 Visual Studio도 2005 -> 2010으로 올렸습니다.
그런데.....
가뜩이나 빌드 환경을 적용 시키고
Lua 의 LNK2001 _lua ... 의 에러도 일일히 lib 파일을 지정 시켜서 서버 프로그램 빌드를 성공 시키는건 좋았습니다만...
이걸 테스트 서버 (윈2003) 에서 돌리니 프로그램이 걍 죽어 버리더군요.
처음엔 64비트로 컴파일 환경이 바껴서 그런가 해서 컴파일 옵션에서 전부 x86환경으로 맞췄는데 결과는 똑같아서
천상 원격 디버깅 까지 해가면서 원인을 찾아보니
CADODataBase::CADODataBase()
{
::CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
if( m_pConnection == NULL ){
ASSERT(false && "CoInitialize() 를 먼저 호출해야합니다.");
LOGCON(_T("[CADODataBase][ERROR][ADODB.Connection]\n"));
}
}
위의 ASSERT에서 죽어버리더군요.
그런데... 이게, 컴파일한 win7환경에선 전혀 문제없이 객체 할당에 성공시키니 뭐가 문제일까 하고 열심히 검색하던중
저랑 같은 증상으로 고생하신 분이 계시더군요.
(참고한분 블러그 입니다. http://icartsh.tistory.com/3)
결론은 msado15.dll 이 윈7이전이랑 이후 버젼이 있어서 만약 이후 버젼에서 컴파일 하면 위와 같은 함수에서 객체 생성에 실패할 수 도 있다는 이야기 입니다.
ms에선 이렇게 설명하고 있습니다.
http://support.microsoft.com/kb/2517589
실제로 저 파일의 타임 스템프가 2010년으로 찍혀 있고, 용량도 2배로 늘어있더군요.
MS가 무슨짓을 했는지 잘 모르지만, 해당 폴더의 원래 있던 msado15.dll 을 msado15_win7.dll 로 바꿔준뒤
저 파일을 다운 받아 재 컴파일 해서 테스트 해보니 이상없이 돌아가네요.
ㅜㅜ... 이것땜에 하루가 또... ㅠㅠ
'윈도우 서버에 대해서' 카테고리의 다른 글
Visual C++ 2010 마이그레이션중... error C2825: '_Fty': '::'가 뒤에 나오면 클래스 또는 네임스페이스여야 합니다. (0) | 2012.06.20 |
---|---|
[Upgrade to VC++ 10] _WIN32_WINNT 버전 문제 (0) | 2012.06.20 |
지금 PC의 IP 알아내기 (0) | 2012.06.08 |
효율적으로 MSDN을 보는 방법 (0) | 2010.08.08 |
윈도우 환경에서 MySql C 프로그래밍 세팅법 (0) | 2009.03.18 |