【问题标题】:QSharedPointer dynamicCast and objectCast fail on ubuntuQSharedPointer dynamicCast 和 objectCast 在 ubuntu 上失败
【发布时间】:2013-03-19 09:50:19
【问题描述】:

我在 Ubuntu 10.04 下使用 Qt 5.0.1,在我的应用程序中,我需要在运行时将 QSharedPointer 与适当的 dynamic_cast (object_cast) 转换一起使用。这些转换在运行时正确加载的共享对象中调用。我必须部署我的应用程序才能在具有 Ubuntu 10.04 操作系统的嵌入式计算机上运行它;这就是我在 Ubuntu 10.04 下使用 Qt 的原因。

如果我构建我的应用程序并在安装了 Qt 库的同一台机器上运行它,一切都会按预期工作。

但是,如果我在嵌入式计算机上运行应用程序,qSharedPointerDynamicCast(以及类似的 QSharedPointer::dynamicCast、qSharedPointerObjectCast 和 QSharedPointer::objectCast)会失败并返回空指针。我检查了两台机器是否具有相同的配置,除了 dynamic_cast/object_cast 问题之外,一切似乎都运行良好。

我认为这可能是 RTTI 问题,但是,经过广泛的谷歌搜索,我没有找到问题的解决方案。

【问题讨论】:

  • qSharedPointerObjectCast 使用 qobject_cast,qobject_cast() 函数的行为类似于标准 C++ dynamic_cast(),其优点是它不需要 RTTI 支持并且可以跨动态库边界工作。所以 RTTI 不必影响行为。
  • 二进制包是否包含所有必要的qt库,包括qt插件?
  • 感谢您的回复。我尝试同时使用 objectCast 和 dynamicCast。但是我认识到 objectCast 对一个类(比如 A 类)工作正常,但它不适用于我的应用程序的另一个类(比如 B 类);相反,dynamicCast 可以在 B 类中正常工作,而在 A 类中则失败。
  • A 和 B 都标有 Q_OBJECT 吗?
  • 似乎构建的包包含所有必需的库和插件,因为如果我只是使用一些“if-else”语句跳过“错误代码”,则不会发生错误。

标签: qt ubuntu dynamic-cast qsharedpointer


【解决方案1】:

我认为对您的问题的唯一解释是您的应用程序中存在内存错误,并且您正在破坏您的对象或使用已释放的对象。使用 Valgrind 看看你会得到什么。

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 2018-09-22
    • 1970-01-01
    • 2016-09-19
    • 2016-10-26
    • 2014-04-25
    • 2012-01-18
    • 2017-05-18
    • 2015-10-28
    相关资源
    最近更新 更多