2012-11-09 4 views
2

Geant4 (A 물리 라이브러리)를 사용하여 코드를 실행하고 VS2010에서 컴파일하려고합니다. Geant4의 일부 라이브러리는 내 C++ 라이브러리와 일치하는 문제가있는 것으로 보입니다.오류 LNK2038이 일치하지 않습니다.

libG4Tree.a (G4ASCIITree.o) : 오류 LNK2038 : 불일치 '_ITERATOR_DEBUG_LEVEL'에 대한 발견 : 값이 '0'값과 일치하지 않는 '컴파일에서 나는 다음과 같은 유사한 오류의 거대한 번호를 2 'in Workshopexample1.OBJ

내 G4 라이브러리에서 100 개가 넘는 .a 파일로이 오류가 발생합니다. 정말 디버그 수준이 꺼져 있어야합니다 ('0'). 그렇지 않으면 G4 코드가 실행되기까지 수년이 걸릴 것입니다. 그래서, 내 VS2010에 정의 된 _ITERATOR_DEBUG_LEVEL의 위치를 ​​찾아서 일치하지 않도록 '0'으로 설정해야합니다. 아무도 도와 줄 수 있니? 건배, Payam

+0

Cygwin (gcc)에서 빌드 한 DLL을 VS2k10 Windows DLL과 함께 사용 하시겠습니까? – AlG

+0

http://msdn.microsoft.com/en-us/library/aa985939%28v=vs.100%29.aspx –

답변

1

오류는 디버그 빌드와 릴리스 빌드를 동일한 실행 파일 또는 DLL로 혼합하여 발생할 수 있습니다.

/MD 대신/MDd를 사용하여 정적 라이브러리를 릴리스하는 반면 응용 프로그램은 릴리스에서/MD입니다. 정적 lib 프로젝트에서 올바른/MD를 설정하면 문제가 해결되었습니다.

이 프로젝트 속성에 _ITERATOR_DEBUG_LEVEL에 대한

Select Configuration Properties/C C++/Code Generation in the tree 
and the option Runtime Library set to the same on all your dependencies projects and application. 

검색을 수행하고 _SECURE_SCL 그들을 제거하거나 모든 프로젝트 및 소스에 적절하게 설정하고 모든 것을 다시.

_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds) 
_ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined) 
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds) 

요컨대 출시 및 디버그 dll이 혼합되어 있습니다. 릴리스 DLL을 디버그 또는 그 반대로 연결하지 마십시오!

관련 문제