交叉编译Qt4:uic segfaults

交叉编译Qt4:uic segfaults,qt,ubuntu,qt4,cross-compiling,Qt,Ubuntu,Qt4,Cross Compiling,对于一个过时的嵌入式项目,我尝试在当前的Ubuntu16.04x86\u64系统上交叉编译Qt4.7.4,并使用多拱设置(amd64+i386) 交叉编译曾经是为Ubuntu12.04x86设置的,并且在那里运行良好。在新系统上编译它以进行主机调试(主机和目标平台设置为x86/i386/32位)也很好。但是,当我试图为目标系统(arm)交叉编译它时,主机设置为i386uicsegfaults,同时构建QtGuilib 以下相关标志用于为目标系统配置Qt: -host-arch i386 -pla

对于一个过时的嵌入式项目,我尝试在当前的Ubuntu16.04x86\u64系统上交叉编译Qt4.7.4,并使用多拱设置(amd64+i386)

交叉编译曾经是为Ubuntu12.04x86设置的,并且在那里运行良好。在新系统上编译它以进行主机调试(主机和目标平台设置为x86/i386/32位)也很好。但是,当我试图为目标系统(arm)交叉编译它时,主机设置为i386
uic
segfaults,同时构建
QtGui
lib

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

-host-arch i386 -platform qws/linux-x86-g++ 
-embedded arm -xplatform qws/linux-gnueabi-arm-mucross-g++
此外,
mkspecs/qws/linux-x86-g++/qmake.conf
已进行修补,以包括一些编译器标志,这些标志似乎是正确编译和链接所必需的:

QT_ARCH = I386
QMAKE_CFLAGS += -m32
QMAKE_CXXFLAGS += -m32
QMAKE_LFLAGS += -m32
这是失败的呼叫:

/<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
通过一些调查,我找到了一个在glibc 2.23中修复的in
fesetenv()
,但由于已经安装了它(libc6 2.23-0ubuntu3),因此我没有在这里进一步了解。断层线116已被破坏,但缺乏内部知识,我无法指出断层的原因:

__asm__ ("ldmxcsr %0" : : "m" (mxcsr));
此外,关于引导构建(包括
uic
)还有一些旧的、封闭的或未解决的问题,但是这些也没有给我任何有用的提示


谁能给一个指针我能找到什么原因,解决什么问题?这个问题的原因是,使用
-I
-L
选项为
配置
脚本提供了额外的、特定于目标的include和lib dir。它们也用于引导构建,这在旧系统上没有多大关系,因为主机和目标的头显然彼此足够接近


一旦移动到目标mkspec文件并添加到
QMAKE\u CFLAGS
QMAKE\u cxflags
QMAKE\u LFLAGS
中,构建过程就可以正常工作。

原因:引导库使用错误的包含路径编译,这些路径仅对目标环境有效。将它们从引导程序makefiles中删除成功后,
uic
将在此之后运行。我现在将尝试提出一个解决方案。
__asm__ ("ldmxcsr %0" : : "m" (mxcsr));