AIX中gcc编译器中的异常处理

时间:2019-04-03 19:55:43

标签: aix

我正在使用AIX 7.1和gcc 8.3编译器。我看到如果使用-Wl,-G标志进行构建,则不会捕获引发的异常。在下面的代码中,如果我不使用-Wl,-G标志,则会看到“ catch int”。有了这个标志,程序就成为核心。

void foo()
{
 try {
   throw 1;
 } catch(int&) {
   std::cout << “catch int” << std::endl;
 }
}

int main()
{
 foo();
}

我的猜测是,异常处理默认情况下处于禁用状态,需要通过某些编译器标志来启用。其他人对此有任何经验吗?请注意,这是特定于AIX平台的。

这就是我的建造方式。整个代码在1个文件中。

bare-08 $ g ++ -Wl,-G 1.cc

bare-08 $ ./a.out

抛出'int'实例后调用

terminate 物联网/中止陷阱(核心被丢弃)

bare-08 $ g ++ -Wl,-G -lsupc ++ 1.cc

bare-08 $ ./a.out

抛出'int'实例后调用

terminate 递归终止 物联网/中止陷阱(核心被丢弃)

没有-G选项,我得到如下所示的链接错误(不是在上面的玩具程序中,而是在我的真实代码中)。

ld:0711-317错误:未定义的符号:.std :: basic_istream> :: seekg(long long,std :: _ Ios_Seekdir) ld:0711-317错误:未定义符号:.sqrtf ld:0711-317错误:未定义符号:std :: basic_streambuf> :: seekoff(long long,std :: _ Ios_Seekdir,std :: _ Ios_Openmode)

有人看过吗?我在一个艰难的地方。使用-G选项摆脱上面的链接错误,但是使用该选项,C ++异常处理将不起作用。

1 个答案:

答案 0 :(得分:0)

请勿使用选项-G。如果您希望使用某些特定于AIX的选项,请使用-brtl

g++ -Wl,-brtl -o AmarnathShanbhag AmarnathShanbhag.cc && ./AmarnathShanbhag
catch int