首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉编译Qt4: uic分段故障

交叉编译Qt4: uic分段故障
EN

Stack Overflow用户
提问于 2016-07-14 14:34:38
回答 1查看 158关注 0票数 4

对于一个过时的嵌入式项目,我尝试在当前的Ubuntu16.04 x86_64系统(amd64 + i386)上交叉编译QT4.7.4。

交叉编译曾经为Ubuntu12.04 x86设置,并且在那里工作得很好。在新系统上编译它以进行主机调试(主机和目标平台被设置为x86/i 386/32位)也很好。但是,当我试图将其交叉编译为目标系统(arm)时,主机将其设置为i386 uic分段故障,同时构建QtGui库。

以下相关标志用于为目标系统配置Qt:

代码语言:javascript
复制
-host-arch i386 -platform qws/linux-x86-g++ 
-embedded arm -xplatform qws/linux-gnueabi-arm-mucross-g++

此外,对mkspecs/qws/linux-x86-g++/qmake.conf进行了修补,以包括一些编译器标志,这些标志似乎是编译和链接正确所必需的:

代码语言:javascript
复制
QT_ARCH = I386
QMAKE_CFLAGS += -m32
QMAKE_CXXFLAGS += -m32
QMAKE_LFLAGS += -m32

这是失败的调用:

代码语言:javascript
复制
/<project>/qt-target/bin/uic /<project>/qt-everywhere-opensource-src-4.7.4/src/gui/dialogs/qpagesetupwidget.ui -o .uic/release-shared-emb-arm/ui_qpagesetupwidget.h

我可以手动再现分段故障并进行调试。strace没有显示任何明显的东西,正在加载正确的i386库。下面是gdb回溯的第一行:

代码语言:javascript
复制
Program received signal SIGSEGV, Segmentation fault.                            
__GI___fesetenv (envp=0xffffbbd4) at ../sysdeps/i386/fpu/fesetenv.c:116         
116     ../sysdeps/i386/fpu/fesetenv.c: Datei oder Verzeichnis nicht gefunden.  
(gdb) backtrace                                                                 
#0  __GI___fesetenv (envp=0xffffbbd4) at ../sysdeps/i386/fpu/fesetenv.c:116     
#1  0x080fa7de in qdtoa (d=9999.9899999999998, mode=2, ndigits=6,               
    decpt=0xffffbce8, sign=0xffffbcec, rve=0xffffbcf4, resultp=0xffffbcf8)      
    at /<project>/qt-everywhere-opensource-src-4.7.4/src/corelib/tools/qlocale.cpp:6655                                              
#2  0x080fc230 in QLocalePrivate::doubleToString (                              
    this=0x8181160 <locale_data>, d=9999.9899999999998, precision=2,            
    form=<optimized out>, width=0, flags=<optimized out>)                       
    at /<project>/qt-everywhere-opensource-src-4.7.4/src/corelib/tools/qlocale.cpp:4012                                              
#3  0x0811da6f in QString::setNum (this=0xffffbf78, n=9999.9899999999998,       
    f=<optimized out>, prec=6)                                                  
    at /<project>/qt-everywhere-opensource-src-4.7.4/src/corelib/tools/qstring.cpp:5930                                              
#4  0x0811ddca in QString::number (n=9999.9899999999998, f=103 'g', prec=6)     
    at /<project>/qt-everywhere-opensource-src-4.7.4/src/corelib/tools/qstring.cpp:6034

一些调查给我带来了一个胶质虫 in fesetenv(),它是在glibc2.23中修复的,但是由于它已经安装了(libc6 2.23-0ubuntu3),我在这里没有进一步了解。断层线116是由那个修正引入的,但由于缺乏内部结构的知识,我无法指出分段故障的原因:

代码语言:javascript
复制
__asm__ ("ldmxcsr %0" : : "m" (mxcsr));

此外,还有一些关于引导构建的旧的、封闭的或未解决的Qt错误报告 (包括uic),但是这些也没有给我任何有用的提示。

谁能给一个指针,我可以尝试找出原因,并解决或解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 14:07:50

造成此问题的原因是,使用configure-L选项向-I脚本提供了附加的、特定于目标的包含和库目录。它们也用于引导构建,在旧的系统中,主机的头和目标的头显然足够近,这并不重要。

一旦移动到目标mkspec文件并添加到QMAKE_CFLAGSQMAKE_CXXFLAGSQMAKE_LFLAGS中,构建过程就能正常工作。

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

https://stackoverflow.com/questions/38377065

复制
相关文章

相似问题

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