首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未捕获C++异常(Qt项目)

未捕获C++异常(Qt项目)
EN

Stack Overflow用户
提问于 2012-01-18 18:28:07
回答 2查看 772关注 0票数 2

我的问题如下:

有一个名为Interface.so的共享库,它基于ICE (互联网通信引擎),类似于频繁重复任务的包装器。其中一项任务是注册一个主题(类似于id)。如果这个主题还不存在,ICE会抛出一个名为NoSuchTopic的异常。

如果我在独立的Qt应用程序中使用Interface.so,则可以捕获NoSuchTopic异常并在catch块( catch块驻留在Interface.so中)中创建主题。但我想在飞行模拟器的插件中做同样的事情,它本身就是一个共享对象-这里的异常没有被前面提到的Interface.so中的catch块捕获到。相反,飞行模拟器崩溃,声明

代码语言:javascript
复制
 terminate called after throwing an instance of 'IceStorm::NoSuchTopic' 

nm -C -D表示Interface.so中未定义'IceStorm::NoSuchTopic‘。这样可以吗?或者应该有一个在哪里找到定义的参考?我已经为libIceStorm.so (libs += -lIceStorm)添加了条目,其中定义了IceStorm::NoSuchTopic (根据nm),但这不会改变任何事情!

我也尝试了'-Wl,-E‘,但我不知道我是否在Qt Creator中正确设置了这个选项。这会有任何帮助吗?

我将非常感谢每一个提示。

EN

回答 2

Stack Overflow用户

发布于 2012-01-18 21:17:32

当我以前遇到过这个问题时,它通常是由于类型信息不可用。

您通常可以使用try {} catch (...) {}块捕获异常,因为即使缺少类型信息,它也可以捕获异常,但它并不是特别有用!

如果共享库有隐藏的符号,这通常是一个问题,请参阅GCC Visibility文章,特别是"Problems with C++ exceptions (请阅读!)“部分。

This question建议使用额外的标志。

有时,如果某些东西是针对旧版本的库构建的,则干净的重建可以修复问题。如果一个干净的重建解决了这个问题,请检查你的构建脚本是否正确。

票数 1
EN

Stack Overflow用户

发布于 2015-06-02 03:10:31

听起来像以前的版本在从源代码构建时使用了"no-exceptions“标志。它增加了大量的构建时间,所以很多人放弃了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8908567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档