aix - AIX 中 gcc 编译器中的异常处理
问题描述
我正在使用 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 个文件中。
裸08$ g++ -Wl,-G 1.cc
裸 08$ ./a.out
在抛出“int”IOT/Abort 陷阱的实例后调用终止(核心转储)
裸08$ g++ -Wl,-G -lsupc++ 1.cc
裸 08$ ./a.out
在抛出一个'int'实例后调用终止递归地调用IOT / Abort陷阱(核心转储)
如果没有 -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++ 异常处理不起作用。
解决方案
不要使用选项-G
。如果您希望使用某些特定于 AIX 的选项,请使用-brtl
:
g++ -Wl,-brtl -o AmarnathShanbhag AmarnathShanbhag.cc && ./AmarnathShanbhag
catch int
推荐阅读
- python - AME 包在 CONDA 环境下找不到模板
- json - 从多列创建 jsonb
- javascript - 组件不等待 http 请求负载
- ajax - WC 使用 Ajax 添加到购物车 - 仅添加第一个产品
- optaplanner - 在另一个类中有一个 PlanningEntity
- networking - 使用 tc-ebpf 卸载 Vlan
- tensorflow - 仅保存可训练权重 - Tensorflow 模型
- javascript - 角,@Injectable
- node.js - 我无法通过 axios 发送数据
- javascript - 如何在 React 中将数据从 CKEditor 发布到 json 服务器