c++ - net - c# ifdef or




Visual Studio에서_ITERATOR_DEBUG_LEVEL 오류가 발생했습니다. (2)

-D_ITERATOR_DEBUG_LEVEL = 0 옵션과 함께 사용하는 모든 것을 컴파일하십시오. VS 2010 릴리스 모드에서는 기본적으로 그렇게되지만 일부 옵션은 여전히 ​​다른 옵션으로 빌드되어 있으므로 바이너리 호환되지 않습니다.

오래된 비주얼 스튜디오에서는 _SECURE_SCL이 있었고 일부 코드에서 여전히 사용할 수 있는지 확실하지 않습니다. 이 일치하는 정적 검사 어딘가에 넣어 (stdafx.h 말하기).

#if _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0 
#error _SECURE_SCL != 0 while _ITERATOR_DEBUG_LEVEL == 0 
#endif 

_ITERATOR_DEBUG_LEVEL에 어떤 값이 있는지 보려면 코드에서 #pragma message를 사용하여 알려줄 수 있습니다.

윈도우 7에서 Visual Studio 2010에서 JRTPLIB를 컴파일하려고합니다. 정말 악몽이었습니다 ... 그러나 나는 적어도이 문제들을 좁히고 있습니다.

이것은 남았습니다.

Error   3   error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in client.obj   C:\Users\Johan-bar\Documents\Visual Studio 2010\Projects\client\client\jrtplib.lib(rtpsession.obj)  client

내가 봤어 톤 및 원인 중 하나가 될 것으로 보인다 디버그 모드에서 컴파일 된 반면 다른 릴리스 모드에서 컴파일됩니다.

다른 컴퓨터에서 테스트하기 때문에 Release 실행 파일을 컴파일하려고합니다.

1) 릴리스 모드 JRTPLIB 또는 클라이언트 중 하나 (내, 컴파일하려는 하나)?

2) ITERATOR_DEBUG_LEVEL을 어떻게 변경합니까? 둘 다 런타임 라이브러리 / MT와 전 처리기 정의 WIN32, _MT를 사용하고 있습니다.

건배


이러한 오류를 생성하는 다른 방법을 찾았습니다.

Visual Studio 2010 일괄 빌드를 사용하여 가능한 모든 플랫폼 및 구성 조합을 작성했으며 이러한 오류가 발생했습니다. 결과물을 보면 일괄 빌드가 프로젝트 종속성을 존중하지 않는다는 것을 알 수 있습니다. 따라서 새로 컴파일 된 Debug obj 파일을 사용하여 릴리스 빌드의 부실 라이브러리를 연결합니다.

나중에 빌드 출력에서 ​​여러 줄이 디버그 버전의 라이브러리를 만들었습니다.

손으로 "일괄 빌드"를 수행하면 (즉, 플랫폼과 구성의 다양한 조합을 수동으로 선택) 깨끗한 빌드가 생성됩니다.

도덕 : Visual Studio 2010 배치 빌드를 사용하지 마십시오. VS의 이후 버전에서이 문제를 해결했는지는 알 수 없습니다.







release