QT经典错误:/usr/include/qt4/QtCore/qatomic_i386.h:132: error: impossible constraint in 'asm'

本文介绍了解决在ARM平台上使用Qt进行交叉编译时遇到的问题,包括配置宏、修正qmake路径以及处理不安全的包含路径警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果交叉编译为ARM的话,需要一个QT_ARCH_ARM的宏,

同理mips的宏为QT_ARCH_MIPS,

需要在你编译的时候给配置上。自己有耐心的话就去查查为什么这个宏变成了QT_ARCH_I386了。


我的错误原因是:Makefile里面QMAKE = 选项指定的qmake 路径错误。本来该 是/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin/qmake
 由于 我在为配置qmake路径前  就 make了一次 所以导致 QMAKE选项 一直是 /usr/bin/qmake。

(我配置好路径也make过了  但是 不知道为什么 新生成的Makefile里面 QMAKE= 选项没有被改过来)


所以rm 删除 Makefile 从新生产就可以了。


cc1plus: warning: include location "/usr/include/qt4/QtXml" is unsafe for cross-compilation
cc1plus: warning: include location "/usr/include/qt4/QtSql" is unsafe for cross-compilation
cc1plus: warning: include location "/usr/include/qt4" is unsafe for cross-compilation
/usr/include/qt4/QtCore/qatomic_i386.h: In destructor 'QString::~QString()':
/usr/include/qt4/QtCore/qatomic_i386.h:132: error: impossible constraint in 'asm'
make: *** [gprstest.o] Error 1

 

<think>好的,我现在需要解决编译时出现的fatal error: asm/errno.h: No such file or directory的问题。根据用户提供的参考引用,特别是引用[4]中提到的解决方案,可能需要检查内核源码的配置和依赖项。 首先,我应该确认这个错误是否与头文件路径有关。asm目录通常位于系统头文件中,比如在/usr/include/asm或者内核源码中的相应位置。如果编译过程中找到这个头文件,可能是因为路径配置正确或者相关开发包没有安装。 参考引用[3]中提到缺少curses.h时,需要安装对应的开发库(如libncurses5-dev)。类似地,缺少asm/errno.h可能意味着需要安装linux-headers或内核相关的开发包。用户可能需要运行类似sudo apt install linux-headers-$(uname -r)的命令来安装所需头文件。 另外,引用[4]中的解决方法是执行make mrproper来清除内核源码中的生成文件和配置,这可能是因为残留文件导致路径错误。如果用户是在编译内核模块或内核本身,执行清理步骤可能会有帮助。 还需要考虑是否在交叉编译环境中,头文件的路径是否正确指向目标架构的目录。例如,某些情况下可能需要创建符号链接,如引用[4]中提到的软链接到/usr/include/asm,但用户提到这并未解决问题,所以可能需要更彻底的清理。 总结可能的解决步骤: 1. 安装必要的头文件包,如linux-headers。 2. 检查头文件路径是否正确,确保编译器能搜索到asm目录。 3. 如果编译的是内核模块,执行make mrproper清理后再重新配置编译。 4. 确认是否缺少架构特定的头文件,可能需要安装多架构支持库。</think>要解决编译时出现的$fatal\ error:\ asm/errno.h:\ No\ such\ file\ or\ directory$错误,可按照以下步骤排查: **1. 安装内核头文件** 该错误通常是由于缺少内核开发头文件导致。对于Debian/Ubuntu系统,执行: ```bash sudo apt install linux-headers-$(uname -r) ``` 这会安装与当前运行内核版本匹配的头文件,包含$asm/errno.h$的完整路径[^4]。 **2. 检查头文件搜索路径** 验证编译器是否能正确找到头文件路径: ```bash echo | gcc -E - -v 2>&1 | grep "include" ``` 若输出中未包含$"/usr/include/asm"$路径,可能需要手动创建符号链接: ```bash sudo ln -s /usr/include/asm-generic /usr/include/asm ``` **3. 清理内核编译环境** 如果是编译内核模块或内核源码时出现该错误,需执行彻底清理: ```bash make mrproper ``` 该命令会清除所有生成文件和配置文件,避免残留文件干扰编译过程。 **4. 确认交叉编译环境配置** 在交叉编译场景下,需确保工具链的$sysroot$路径正确指向目标架构的头文件。例如ARM架构可能需要: ```bash sudo apt install gcc-arm-linux-gnueabihf libc6-dev-armhf-cross ``` **5. 验证头文件存在性** 手动检查头文件是否存在: ```bash find /usr/include -name errno.h ``` 正常应输出类似$"/usr/include/asm-generic/errno.h"$的结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值