我正在使用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 ++异常处理将不起作用。
答案 0 :(得分:0)
请勿使用选项-G
。如果您希望使用某些特定于AIX的选项,请使用-brtl
:
g++ -Wl,-brtl -o AmarnathShanbhag AmarnathShanbhag.cc && ./AmarnathShanbhag
catch int