我想在我的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 ++标准库的某些部分被指定为抛出异常。如果禁用这些你驶入的“未定义行为”。

的浑水
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top