首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Buildroot qt5webkit包可能出现的问题

Buildroot qt5webkit包可能出现的问题
EN

Stack Overflow用户
提问于 2016-09-06 06:47:33
回答 1查看 234关注 0票数 0

在试图让qt5webkit包在iMX6设备上运行(Qt版本5.5.0来自2015.11 Buildroot发布版)时,我看到了代码生成的运行时断言。

它用输出来显示自己:

代码语言:javascript
运行
复制
ASSERTION FAILED:
    isPointerTypeAlignmentOkay(reinterpret_cast<TypePtr>(ptr))
    ../WTF/wtf/StdLibExtras.h(102):
    TypePtr reinterpret_cast_ptr(const void*)
    [with TypePtr = const unsigned int*]
Segmentation fault (core dumped)

执行断言检查的代码如下所示,您可以看到它实际上是在检查对齐,以确保它是正常的:

代码语言:javascript
运行
复制
template<typename Type> bool isPointerTypeAlignmentOkay(Type* ptr)
{
    return !(reinterpret_cast<intptr_t>(ptr) % __alignof__(Type));
}

template<typename TypePtr> TypePtr reinterpret_cast_ptr(const void* ptr)
{
    ASSERT(isPointerTypeAlignmentOkay(reinterpret_cast<TypePtr>(ptr)));
    return reinterpret_cast<TypePtr>(ptr);
}

现在我明白为什么要这样做了。从(诚然已褪色的)内存中,如果您尝试不对齐的访问,那么早期ARM芯片就会出现故障,甚至更晚一些没有出错,但运行速度仍然较慢的芯片会出现故障。

我不清楚为什么Buildroot发行版的标准代码会失败。我非常肯定这个问题不在我自己的代码中,因为编译和运行示例浏览器应用程序(来自qt5webkit-examples Buildroot包)也存在同样的问题。

断言显然在只为GCC/CLANG下的ARM/MIPS编译的部分中,所以它非常特定于这些平台。这意味着它完全有可能从未被正确地测试过。

现在,我添加了一个本地修补程序作为解决办法,特别是更改检查以确保对齐不相关:

代码语言:javascript
运行
复制
diff --git a/Source/WTF/wtf/StdLibExtras.h b/Source/WTF/wtf/StdLibExtras.h
--- a/Source/WTF/wtf/StdLibExtras.h 2000-01-01 00:00:00.000000000 +0000
+++ b/Source/WTF/wtf/StdLibExtras.h 2000-01-01 00:00:00.000000000 +0000
@@ -86,5 +86,5 @@
 template<typename Type>
 bool isPointerTypeAlignmentOkay(Type* ptr)
 {
-    return !(reinterpret_cast<intptr_t>(ptr) % __alignof__(Type));
+    return true;
 }

然而,我对此有几点担心。第一个问题是,在ARM芯片上这是否真的是安全的(具体来说,目前,Cortex-A9变体)。它似乎运行良好,但我不确定是否有微妙的边缘情况,我应该关注。我还不担心它运行慢的可能性,尤其是如果它根本不运行的话。

第二个问题仅仅是询问是否有其他人成功地将qt5webkit包作为Buildroot的一部分在ARM芯片上工作。我是不是漏掉了一些对初学者来说显而易见的东西?如果它确实是标准Buildroot包中的一个错误,我可能最终会提交一个补丁,但我不想这样做,直到我更好地理解它。

在环境方面,我们在Ubuntu14.04主机上使用Buildroot内部工具链。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-07 07:17:15

在中尝试以下目标选项:

  1. 选择Enable扩展支持
  2. 将浮点策略设置为VFPv3-D16
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39342254

复制
相关文章

相似问题

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