龙芯5000编译Qt环境报错

问题

之前项目的Qt应用需要适配龙芯4000,龙芯4000使用的是mips架构,Qt环境的搭建基本上很顺利完成。但龙芯5000不是基于mips架构,是全新的指令集,据说效率相比mips提升了不少。全新的指令集,那意味着要重新编译Qt环境,按往常的编译步骤进行操作,然后就出问题了

报错如下

error: #error Target architecture was not detected as supported by Double-Conversion.

字面意思大概是当前的系统架构不支持Double-Conversion

百度一圈都没有这个错误的问题,Google倒是挺多的,不过也不是编译Qt出现的

解决思路

报错的文件为qtbase/src/3rdparty/double-conversion/include/double-conversion/utils.h

打开这个头文件,找到报错的信息

是由于龙芯5000是全新的指令集,上面定义的宏并没有该架构,可以看到常见mips、aarch、alpha等,所以问题就出在这里,那是不是添加龙芯5000架构的宏就可以了?想是这么想,那就加上试试。

使用命令查看操作系统内核信息

uname –a
Linux hedy-PC 4.19.0-loongson-3-desktop #3208 SMP Sun Jun 13 14:47:22 CST 2021 loongarch64 GNU/Linux

架构为loongarch64

defined(__mips__) ||添加宏

defined(__loongarch__)

重新编译make,发现就可以了!!!

一开始在defined(_MIPS_ARCH_MIPS32R2)后面添加,发现不行,在defined(__mips__)后添加就通过,不清楚是啥情况。另外使用defined(__loongarch64__)印象中好像也是不行,很懵圈,完全是试出来的。

这其中经历很多波折一步一步才找到这个解决方法,这也是比较表面的修改,其中的原理没有太深究,至于有没有其他隐患就不是很清楚了,反正是编译通过了。

其他思路

这其中尝试了其他的解决思路,Double-ConversionQt依赖的第三方库,那是不是可以配置不依赖其进行编译?没错,还真有这个配置。

./configure可以进行配置

-no-doubleconversion Use sscanf_l and snprintf_l for (imprecise) double con version.
-qt-doubleconversion Use the libdouble-conversion bundled with Qt.
-system-doubleconversion Use the libdouble-conversion provided by the system.

采用-no-doubleconversion方式配置发现无法完成配置,makefile无法生成,提示sscanf_l and snprintf需要依赖libdouble-conversion,这条路是走不通了,我有点好奇这个配置项有什么用,提供可以不链接,但是配置了又通不过。

默认是使用qt源码中自带的,也可以依赖系统中安装的,qt源码中编不过那用系统的也可以。安装libdouble-conversion,发现没有现成的包,如果你所使用的系统有现成的包能够直接安装,那配置依赖系统的中库理论上也是可以解决的。

其实如果没有相应的包,使用libdouble-conversion源码进行安装,其实和qt带的源码是一样的。当然独立编译安装libdouble-conversion可以排除其他因素,更容易找到问题,我也是编译libdouble-conversion的时候发现在那个位置加上宏就可以了。

附带libdouble-conversion源码下载及安装说明,点击这里

  • 13
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值