- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[API/MFC] LNK2005 에러 처리 본문
역시.. LNK2005에 대한 error message로 인하여.. 거의 반나절이나 되는 시간을 까먹었다.
이렇게 편한 internet이 있는줄도 모르고...... 문명의 뒤에 있는 듯한 이 느낌...... T.T
여튼 아래와 같은 이유로 LNK2005 error가 발생한다.
아래와 같은 이유로.. 알아서.. 해결할 수도 있겠다..
---------------------------------------------------------------------------------------------------------------------
발췌 : http://blog.naver.com/rinbo7
MS Visual Studio를 사용하다가 다음과 같은 링크 에러를 보았다.
msvcrt.lib(MSVCRT.dll) : error LNK2005: _atoi already defined in libcmt.lib(atox.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmt.lib(strchr.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: _strstr already defined in libcmt.lib(strstr.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: __stricmp already defined in libcmt.lib(stricmp.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: __setmbcp already defined in libcmt.lib(mbctype.obj)
nafxcw.lib(nolib.obj) : warning LNK4098: defaultlib "mfc42.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
nafxcw.lib(nolib.obj) : warning LNK4098: defaultlib "mfcs42.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
libcmt.lib(crt0init.obj) : warning LNK4098: defaultlib "msvcrt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
위에서 중복 선언되었다고 하는 함수들은 CRT library인데 뭐가 중복 선언되었다고 하는 것인지 알 수가 없어 한참을 삽질하다가 해결책을 구글링을 통해 발견했다.
- 발췌문 -
프로그램에서 사용되는 모든 라이브러리의 형태를 일치 시켜야 합니다. 윈도우 라이브러리는 3가지 형태가 있다네요.
1. 싱글쓰레드, 정적 라이브러리 링크 : /ML : libc*.* 이용
2. 멀티쓰레드, 정적 라이브러리 링크 : /MT : libcmt*.* 이용
3. 멀티쓰레드, 동적 라이브러리 링크 : /MD : msvcrt*.* 이용
그런데 중요한 것은 위의 3가지 형태의 라이브러에 동일한 함수들이 존재한다는 거죠. 그래서 링크도중에 2개 이상의 파일을 찾게되면 당연이 중복으로 존재하는 함수가 존재하게 되어 충돌하게 됩니다.
이를 원천적으로 해결하려면 프로젝트에 연관된 모든 프로그램을 3가지 중 한가지 형태로 빌드를 하면됩니다. 제작 중인 프로젝트에 사용되는 모든 라이브러리도 동일한 링크 형태로 빌드된 것이 링크되면 됩니다.
예를 들어서 dll을 사용하는 프로젝트가 /MDd 옵션을 사용하여 컴파일 한다면 이 프로젝트에서 사용되는 모든 라이브러리도 /MDd로 컴파일 된것을 준비해야 합니다.
[출처] LNK2005 에러 처리|작성자 딸기
'★─Programing > ☆─API | MFC' 카테고리의 다른 글
[API/MFC] DLL이 DLL을 참조할때 LoadLibrary()의 고찰 (0) | 2013.06.14 |
---|---|
[API/MFC] Use MFC in a Shared DLL과 Use MFC in a Static Library (0) | 2013.06.14 |
[API/MFC] CString 선언 헤더파일 (0) | 2013.06.04 |
[API/MFC] 정적 Lib 만들어 이용하기 - 비주얼스튜디오 2008 (0) | 2013.05.21 |
[API/MFC] "미리 컴파일된 헤더 지시문을 찾는 동안 예기치 않은 파일의 끝이 나타났습니다." (0) | 2013.05.21 |