我可以禁用STL异常?
-
23-08-2019 - |
题
我想在我的C ++ aplication,MSVC下编译禁用例外。我HVE切换选项启用C ++异常为NO,但我得到警告,告诉我使用的选项/ EHSC,我不想。
我没有try / catch块在我的代码,但我用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是打开还是关闭。
没有正确的解决方案
其他提示
微软STL支持异常失活。
有关MSVC STL限定宏_HAS_EXCEPTIONS = 0,禁止的情况下,例外您LIBCMT.LIB / libcmtd.lib链接应用程序(/ MT或/ MTD编译器选项)。
如果您MSVCRT.LIB / MSVCRTD.LIB(/ MD或/ MDD编译器选项)链接需要定义一个多个宏 - _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 ++标准库的某些部分被指定为抛出异常。如果禁用这些你驶入的“未定义行为”。
的浑水