상세 컨텐츠

본문 제목

MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _free이(가) LIBCMTD.lib(dbgfree.obj)에 이미 정의되어 있습니다

개발과 트러블슈팅

by 양고 2009. 12. 18. 11:35

본문


1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _free이(가) LIBCMTD.lib(dbgfree.obj)에 이미 정의되어 있습니다.
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: __finite이(가) LIBCMTD.lib(_ieeemisc_.obj)에 이미 정의되어 있습니다.
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _malloc이(가) LIBCMTD.lib(dbgmalloc.obj)에 이미 정의되어 있습니다.
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: ___iob_func이(가) LIBCMTD.lib(_file.obj)에 이미 정의되어 있습니다.
1>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _exit이(가) LIBCMTD.lib(crt0dat.obj)에 이미 정의되어 있습니다.
1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z)이(가) LIBCMTD.lib(typinfo.obj)에 이미 정의되어 있습니다.
1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z)이(가) LIBCMTD.lib(typinfo.obj)에 이미 정의되어 있습니다.
1>LINK : warning LNK4098: 'MSVCRTD' defaultlib가 다른 라이브러리와 충돌합니다. /NODEFAULTLIB:library를 사용하십시오.

디버그와 릴리스버전이 충돌해 발생하는 에러라는데...
해결책은 프로젝트 속성 → 구성속성 → C/C++ → 코드생성 → 런타임라이브러리 → Multithreaded Debug DLL (/MDd)를 선택하는 것이다.
프로젝트와 다른 라이브러리는 디버그 모드인데 런타임 라이브러리가 일반(릴리스) 모드라 발생하는 문제인 듯.
근데 프로젝트 설정을 디버그로 선택하면 자동으로 /MDd가 선택돼야 하는 것 아님? 매번 생기는 의문...




관련글 더보기