在项目.pro文件中我指定了:
QMAKE_CXXFLAGS += -fno-exceptions
然而,我可以在我的应用程序中抛出异常。有什么想法吗?
示例:这应该不起作用,但它可以正常工作
#include <QApplication>
#include <QtDebug>
int main(int c, char**v)
{
QApplication app(c,v);
try
{
throw 1;
}
catch(int i)
{
}
return app.exec();
}
答案 0 :(得分:11)
您不会通过设置QMAKE_CXXFLAGS
来关闭例外,因为此选项由CONFIG
处理。你应该使用
CONFIG-=exceptions
关闭它们。
如果您未更改QMAKE_CXXFLAGS
或CONFIG
设置,请参阅g ++参数:
g++ -c -O2 -frtti -fexceptions -mthreads -Wall <...> main.cpp
现在,让我们设置QMAKE_CXXFLAGS
:获取
g++ -c -fno-exceptions -O2 -frtti -fexceptions -mthreads -Wall <...> main.cpp
哎呀,我们-fno-exceptions
被CONFIG
的{{1}}覆盖了。
现在,让我们设置-fexceptions
:
CONFIG
哦!编译错误!
答案 1 :(得分:6)
我对这个问题感到有点困惑。
如果您拥有(或链接到)引发异常的代码,那么您不能通过使用-fno-exceptions
构建代码来神奇地让它们消失。该标志会影响支持try
和catch
所需的代码生成,而不是实际抛出异常的代码。
有关详细信息,请参阅GCC documentation。文档说:
总而言之,带有异常处理的有效C ++代码将转换为方言而无需异常处理。
因此,似乎编译器或多或少会导致异常处理(和抛出)代码“消失”,而不是检测其使用并标记错误。后者似乎是你所期待的,但那种期望是完全错误的。
答案 2 :(得分:2)
尝试使用以下两个
QMAKE_CFLAGS_RELEASE -= -fno-exceptions
QMAKE_CXXFLAGS_RELEASE -= -fno-exceptions