http://www.gpgstudy.com/forum/viewtopic.php?t=5895&sid=2d46b8eea23503ea04aeb11b9a9955ed
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)이(가) LIBCMTD.lib(new.obj)에 이미 정의되어 있습니다.
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z)이(가) LIBCMTD.lib(dbgdel.obj)에 이미 정의되어 있습니다.
1>C:\uk1\vb2010\opencv2010\Debug\opencv2010.exe : fatal error LNK1169: 여러 번 정의된 기호가 있습니다.
1>
1>빌드하지 못했습니다.
1>
1>경과 시간: 00:00:03.83
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========
디버깅모드에서 릴리즈 모드로 바꿨더니 에러가 안난다.
이런 문제가 나타나는 이유는 주로
1.링크하는 모든 라이브러리들을 디버그 모드 또는 릴리즈 모드로 통일시키지 않았거나
2.런타임 라이브러리가 일치하지 않아서 생기는 경우가 대부분입니다.
예를 들어, 작업중인 프로젝트는 릴리즈인데 디버그 모드로 컴파일된 라이브러리를 링크하는 경우,
작업중인 프로젝트는 싱글 쓰레드인데 멀티 쓰레드로 컴파일된 라이브러리를 링크하는 경우,
두가지 경우가 뒤섞인 경우가 있을 수 있겠습니다.
간혹 위에서처럼 특정 라이브러리 무시 옵션을 주고 링크할 수는 있으나
임시 방편일 뿐입니다.
무시 옵션없이도 깨끗이 링크되어야 합니다.
그렇지 않으면 나중에 문제가 발생할 수 있습니다.
링크하는 라이브러리와 현재 작업중인 프로젝트 간의 설정(빌드 모드, 런타임라이브러리)이 일치하는 지 꼼꼼히 살펴보시기 바랍니다.
링커 옵션에 라이브러리를 중복 링크를 하면 그럴수 있습니다.
a라는 함수가 A라는 라이브러리 안에 들어있고..
동시에 a라는 함수가 B라는 라이브러리에 들어있다고 할때..
링커 옵션에 이 두 A, B라는 라이브러리를 주었을때 링커가 어떤것을
링크 해야할지 모를 경우에도 발생합니다.
대개 프로젝트에서 공통적으로 사용하는 라이브러리들을 한개의 라이브러리에 컴파일을 해놓고 사용할 경우 저런 충돌 문제가 발생하기도 합니다..
그럴때는 공통적으로 사용하는 라이브러리에서 중복되는 라이브러리를 삭제하시든가.. 아니면 위에서 하신대로 옵션에서 라이브러리를 무시하여 주시면 됩니다.
비회원 씀: |
앗.. 감사합니다.. 추가가 안됐었더군요 ^^; 근데.. 셋팅에서 디버그에 있던거 전부 카피해서 릴리즈에 넣었는데요 이번엔..ㅠㅠ LIBCMT.lib(setlocal.obj) : error LNK2005: _setlocale already defined in LIBC.lib(setlocal.obj) LIBCMT.lib(setlocal.obj) : error LNK2005: __expandlocale already defined in LIBC.lib(setlocal.obj) LIBCMT.lib(setlocal.obj) : error LNK2005: ___init_dummy already defined in LIBC.lib(setlocal.obj) LIBCMT.lib(setlocal.obj) : error LNK2005: __strcats already defined in LIBC.lib(setlocal.obj) LIBCMT.lib(setlocal.obj) : error LNK2005: ___lc_strtolc already defined in LIBC.lib(setlocal.obj) LIBCMT.lib(setlocal.obj) : error LNK2005: ___lc_lctostr already defined in LIBC.lib(setlocal.obj) LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined in LIBC.lib(_file.obj) LIBCMT.lib(_file.obj) : error LNK2005: ___endstdio already defined in LIBC.lib(_file.obj) LIBCMT.lib(_file.obj) : error LNK2005: __cflush already defined in LIBC.lib(_file.obj) LIBCMT.lib(_file.obj) : error LNK2005: __iob already defined in LIBC.lib(_file.obj) LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library 이런 링크 에러가 나네요..좌절스.. 아.. 링크에러나면 정말 초난감하네요..ㅠㅠ |
'차근차근 > C' 카테고리의 다른 글
<io.h> _finddata_t 구조체 (0) | 2014.11.19 |
---|---|
하위폴더 파일 출력 / CFileFind Class (0) | 2014.11.19 |
비주얼 스튜디오에서의 dirent.h 의 사용 (0) | 2014.10.23 |
리눅스(유닉스) 파일목록(하위디렉토리포함)구하기 (0) | 2014.10.22 |
HANDLE (0) | 2014.10.22 |