IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 龙芯5000编译Qt环境报错 -> 正文阅读

[C++知识库]龙芯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源码下载及安装说明,点击这里

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:37:21  更:2021-09-11 18:40:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:55:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码