문제

MSVC에 따라 컴파일 된 C ++ usplication의 예외를 비활성화하고 싶습니다. 옵션을 사용하여 C ++ 예외를 사용하지 않지만 원하지 않는 옵션 /ehsc를 사용하라는 경고를받습니다.


코드에 시도/캐치 블록이 없지만 STL을 사용합니다. 매크로 정의를 사용하여 _has_exceptions = 0은 STL의 예외를 비활성화해야하지만 여전히 경고를 받고 있습니다.


warning C4275: non dll-interface class 'stdext::exception' used as base for dll-interface class 'std::bad_typeid' see declaration of 'stdext::exception' see declaration of 'std::bad_typeid'


예외가 STL을 끄는 방법이 있습니까?

참고 : 내 코드에서 RTTI 옵션도 끄고 싶습니다. RTTI가 켜져 있거나 꺼져 있든 상관없이 동일한 경고를받습니다.

올바른 솔루션이 없습니다

다른 팁

Microsoft STL은 예외 비활성화를 지원합니다.

MSVC STL 정의 MACRO _HAS_EXCEPTIONS = 0 응용 프로그램을 libcmt.lib/libcmtd.lib (/mt 또는/mtd compiler 옵션)와 연결하는 경우 예외를 비활성화합니다.

msvcrt.lib/msvcrtd.lib (/md 또는/mdd compiler 옵션)와 연결하면 매크로 -_static_cpplib를 하나 더 정의해야합니다. 이 경우 STL 코드를 포함시키기 전에 다음 줄을 추가하십시오.

#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB

또는 컴파일러 옵션에 다음을 추가하십시오.

-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB

프로젝트 설정에서 C ++ 예외를 비활성화해야합니다.

예외 비활성화를 지원하는 STL을 사용해야합니다. 이것은 일반적으로 컴파일 타임 매크로 정의입니다.

내가 착각하지 않는 한, stlport는 이것을 _stlp_use_exceptions = 0 및 _stlp_no_exceptions로 제공합니다. 프로그램이 이러한 설정으로 어떻게 행동하는지 모르겠습니다. ;)

MS STL에는 숨겨진 깃발도 있다고 생각합니다.

Eastl은 예외를 사용하여 상자에서 나옵니다.

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

유형 ID는 런타임 유형 식별과 관련이 있습니다. RTTI를 끄는 것도 원할 수도 있습니다.

그러나 C ++ 표준 라이브러리의 특정 부분은 예외를 던지도록 지정됩니다. 당신이 그들을 비활성화하면 당신은 "정의되지 않은 행동"의 어두운 물로 항해하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top