2013-04-10 5 views
1

릴리스에서 코드를 빌드 할 때마다 컴파일되고 정상적으로 실행됩니다. 그러나 디버그로 전환하면 알 수없는 오류가 발생합니다. 그 중 더 다음빌드시 연결 오류 디버그

swift.lib(scene.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 
1>swift.lib(fileio.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 
1>swift.lib(mesh_utils.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 
1>swift.lib(object.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 
1>swift.lib(mesh.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 
1>swift.lib(pair.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 
1>swift.lib(lut.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::flush(void)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in main.obj 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __thiscall std::basic_ostream<char,struct std::char_traits<char> >::_Osfx(void)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@QAEXXZ) already defined in main.obj 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "bool __cdecl std::uncaught_exception(void)" ([email protected]@@YA_NXZ) already defined in libcpmtd.lib(uncaught.obj) 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::setstate(int,bool)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in main.obj 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __int64 __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,__int64)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in main.obj 

무리 ...

1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" ([email protected]@@[email protected]@Z) already defined in LIBCMTD.lib(stdexcpt.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" ([email protected]@@[email protected]) already defined in LIBCMTD.lib(stdexcpt.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __thiscall std::bad_cast::bad_cast(char const *)" ([email protected]@@[email protected]@Z) already defined in LIBCMTD.lib(stdexcpt.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" ([email protected]@@[email protected]@@Z) already defined in LIBCMTD.lib(stdexcpt.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _memmove already defined in LIBCMTD.lib(memmove.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fgetc already defined in LIBCMTD.lib(fgetc.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fputc already defined in LIBCMTD.lib(fputc.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _ungetc already defined in LIBCMTD.lib(ungetc.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __lock_file already defined in LIBCMTD.lib(_file.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __unlock_file already defined in LIBCMTD.lib(_file.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fflush already defined in LIBCMTD.lib(fflush.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _setvbuf already defined in LIBCMTD.lib(setvbuf.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strncmp already defined in LIBCMTD.lib(strncmp.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _memcpy_s already defined in LIBCMTD.lib(memcpy_s.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fwrite already defined in LIBCMTD.lib(fwrite.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fgetpos already defined in LIBCMTD.lib(fgetpos.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __fseeki64 already defined in LIBCMTD.lib(fseeki64.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fsetpos already defined in LIBCMTD.lib(fsetpos.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fclose already defined in LIBCMTD.lib(fclose.obj) 
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMTD.lib(typinfo.obj) 
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMTD.lib(typinfo.obj) 
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 
1>C:\...\: fatal error  LNK1169: one or more multiply defined symbols found 

은 내가 SWIFT와 OPCODE 라이브러리를 모두 사용하고 있습니다. C++에서 "런타임 라이브러리"필드를 사용합니다. -> 코드 생성은 모든 3 개의 프로젝트 (내 주요 프로젝트, 신속한 opcode)에서 동일합니다. 디버그 모드와 둘 다 작동하지 않으려면 \ MT와 모두 \ MD로 설정해야했습니다. 실제로, Release에서 성공적으로 빌드 될 때, Opcode와 활성 프로젝트를 \ MD (\ MD 또는 \ MT 일 수 있으며 여전히 빌드 됨)로 설정해야합니다. 정말 잘 링크를위한 런타임 라이브러리를 이해하지 못한다 ... 그래서이 문제가 있다면, 당신은 명시 적으로하려고 할 수 있습니까?

나는 또한 _ITERATOR_DEBUG_LEVEL을 (를) 찾으러 갔지만 찾을 수 없습니다. 내가 그것을 바꿀 수있는 곳이 어디 있습니까? 나는 그것을 어디서나 찾을 수 없다. 나는 프로젝트 속성에서 그것을 보지 못하지만, 나는 그 속성에서 올바른 장소를보고 있지 않다는 것이 완벽하게 그럴듯하다.

분명히 사람들은 잘못된 문자 세트로 비슷한 오류를 경험했습니다. 나는 모두를 모두 멀티로 설정하려고 시도했다. 그건 아무런 효과가없는 것처럼 보였습니다.

현재 활성 프로젝트는 swift.lib 만 추가 종속성으로 사용합니다. opcode.dll과 opcode_d.dll이있어 정적으로 링크하지 않습니다. 전 처리기에서

C/C++ 설정에서, 나는이 다음 처리기 정의 :

연산 코드 :

WIN32 
_DEBUG 
_WINDOWS 
_USRDLL 
OPCODE_EXPORTS 

SWIFT :

_DEBUG 
WIN32 
_LIB 
LOOKUP_TABLE_5_625 

활성 프로젝트 :

WIN32 
_DEBUG 
_CONSOLE 

필요한 경우 더 많은 정보를 제공 할 수 있습니다. 어떤 도움을 주셔서 감사합니다.

답변

0

CRT (C Runtime Library)가 모든 프로젝트에 대해 일관성이 있다는 것은 이미 알고있는 것처럼 들리지만 이는 바람직한 관행입니다. CRT의 독립적 인 복사본을 사용하기 때문에 DLL 프로젝트에 덜 중요합니다.

다음 단계는 "프리 프로세서"페이지에서 프로젝트 설정을 살펴 보는 것입니다. 세 가지 프로젝트에서 충돌 할 수있는 선처리 프로세서 (매크로) 정의를 찾고 있습니다. 그 목록에서 _ITERATOR_DEBUG_LEVEL을 (를) 찾을 수있을 것입니다.

StackOverflow에 후속 질문을 게시하는 방법을 모르겠지만 각 프로젝트에서 찾은 매크로 정의를 질문에 추가 할 수 있습니다.

+0

거기에 _ITERATOR_DEBUG_LEVEL 매크로가 표시되지 않지만 각 프로젝트의 매크로로 질문을 업데이트했습니다. – Sterling