在ubuntu16.04搭建Qt4.8.6嵌入式开发环境

2023-11-05

环境以及软件版本

虚拟机环境:ubuntu16.04 64

虚拟机环境中gcc的版本:gcc version 5.4.0 20160609

Qt版本:qt-everywhere-opensource-src-4.8.6.tar.gz

下载路径:http://download.qt.io/archive/qt/4.8/4.8.6/

QtCreator版本:qt-creator-linux-x86_64-opensource-2.5.2.bin

下载路径:http://download.qt.io/archive/qtcreator/2.5/

嵌入式交叉编译工具:arm-none-linux-gnueabi-gcc 4.3.3

下载路径: http://pan.baidu.com/s/1kULkXnh

中间使用到的gcc版本:gcc-4.4.3.tar.gz

下载路径:https://ftp.gnu.org/gnu/gcc/gcc-4.4.3/

Qt环境配置:

交叉编译环境配置:

1.1解压

tar -xvf arm-2009q1.tgz -C /usr/local/

1.2环境变量配置:

由于上一步是将交叉编译工具arm-none-linux-gnueabi-gcc 4.3.3解压到了/usr/local/目录下,交叉编译所需要使用的arm-none-linux-gnueabi-等命令是在/usr/local/arm-2009q1/bin目录中,运行

sudo vim vim environment /usr/local/arm-2009q1/bin追加到环境变量

2. Qt环境安装

2.1 Qt Creator安装

切换到对应目录,直接./qt-creator-linux-x86_64-opensource-2.5.2.bin运行按照界面提示操作即可

2.2 Qt安装

2.2.1 解压

qt-everywhere-opensource-src-4.8.6.tar.gz解压三份,分别命名为qt_pc qt_x86 qt_arm

tar qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt/qt_pc

tar qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt/qt_x86

tar qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt/qt_arm

安装qt_pc

 切换到qt_pc所在目录:cd /usr/local/qt/qt_pc

 分别运行 即可完成安装

./configure  

make

make install

安装qt_x86

1. 安装

切换到qt_x86所在目录:cd /usr/local/qt/qt_x86

分别执行以下命令进行安装

./configure -opensource -confirm-license -prefix /usr/local/Trolltech/Qt-qvfb-4.8.6 -embedded x86 -xplatform qws/linux-x86_64-g++ -qvfb

make

sudo make install

-xplatform qws/linux-x86_64-g++ :因为Ubuntu系统是64位的,所以将平台参数配置成linux-x86_64的。如果使用的是32位系统可直接使用qws/linux-x86-g++

2. qvfb模拟中文显示乱码

解决办法,重新下载了支持中文的wenquanyi字体,重新导入到Qt_x86的安装目录下的/lib/fonts下,然后在qtcreator的运行参数那里追加参数:

-qws -qws  -font wenquanyi对于不同字号的支持,需要复制不同字号大小的wenquanyi字体到/lib/fonts目录下。之后再次点击即可运行中文即可解决。

详细:

http://blog.csdn.net/bobbat/article/details/51494226

http://blog.csdn.net/zybasjj/article/details/7660432

 

 


 

Qt4.8.6 ARM版安装

安装过程中需要的工具:

apt-get install lsb-core

  apt install libtool-bin

      gcc-4.4.3源码(gcc版本高于4.3.3即可,需要用到其中的linux-atomic.c文件)

1:交叉编译环境配置:

1.1解压

tar -xvf arm-2009q1.tgz -C /usr/local/

1.2环境变量配置:

由于上一步是将交叉编译工具arm-none-linux-gnueabi-gcc 4.3.3解压到了/usr/local/目录下,交叉编译所需要使用的arm-none-linux-gnueabi-等命令是在/usr/local/arm-2009q1/bin目录中,运行

sudo vim vim environment /usr/local/arm-2009q1/bin追加到环境变量

2. Qt ARM版配置
1-解压:

tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt_arm

   2-configure

./configure -little-endian -opensource -confirm-license -prefix /hisome/qt/qt_4_8_6_arm -embedded arm -xplatform qws/linux-arm-gnueabi-g++

3-make

make  -j4

出错:交叉编译环境配置没错

 

apt-get install lsb-core

 

可见是在编译/usr/local/qt_arm/qt-everywhere-opensource-src-4.8.6/src/corelib下面的文件时找不到lrt库了没,修改方法切换到此目录,修改其Makefile,在LIBS变量后追加-lrt

 

下载的gcc-4.4.3.tar.gz的源码解压,然后gcc-4.4.3/gcc/config/arm/目录下找到一个linux-atomic.c

运行如下两条命令使用libtool制作链接库:

安装libtool --  apt install libtool-bin

 libtool --tag=CC --mode=compile /usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c 

libtool --tag=CC --mode=link /usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo

之后会在当前目录生成一个隐藏目录:.libs。进入到.libs这个目录,将其中的liblinux-atomic.a这个静态链接库复制到 /opt目录下。此处并非指定opt,只需复制到一个简短的目录,便于后续修改qt-everywhere-opensource-src-4.8.6.tar.gz中出错的Makfile

就上图而言出错的目录是/usr/local/qt/qt_arm/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebKit/qt

到达这个目录,打开其Makfile,在LIBS这个变量后追加 -L/opt -llinux-atomic,保存退出即可,另外在接下来的编译中还会报一个同类型的错误,此时打开此目录下的Makefile.WebKit.QtWebKit在其LIBS后追加同样内容后继续make.

对于undefined reference to `__sync_add_and_fetch_4'类型的错误,只需在错误的地方注意下出错的目录,在对应目录中的Makefile中添加这个链接库即可。

 

没有任何错误后直接make install就好了

4. 字库设置,由于使用所下载的qt-everywhere-opensource-src-4.8.6自身不带中文字库,所以对于中文需求还需要另外下载pfb格式的字库。此次交叉编译过程中所使用的字库是wenquanyi字体。另外也可以将宋体等字体进行pfb格式转换详细过程见:

http://blog.csdn.net/zybasjj/article/details/7660432

开发板配置:

1. Qt应用程序所需要的库复制出来在qt_arm的安装目录下的lib目录下,应用程序需要哪个库就复制出来哪个库;另外还需要将所需要的字库复制到对应的文件夹(qt安装目录/lib/fonts)。所有这些文件的存放路径要与PC上的安装路径一致,字库设置完后在代码中要将中文转码为utf -8

设置开发板的Qt环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/qt4_8_6/lib

export QT_QPA_PLATFORM_PLUGIN_PATH=/home/qt4_8_6/plugins

export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0

export QT_QPA_FONTDIR=/home/qt4_8_6/fonts-------设置字库

详细介绍如下表

driver specific option

使用对象

描述

tty=<device>

LinuxFb

将设备文件描述符传递到Qt应用程序所在的终端

nographicsmodeswitch

LinuxFb

确保应用程序不运行在graphics模式

littleendian

LinuxFb

告知驱动程序处理framebuffer的时候使用小端模式

MmWidth=<value>

LinuxFb QVFb

屏幕的物理宽度,用于计算DPI

MmHeight=<value>

LinuxFb QVFb

屏幕的物理高度用于计算DPI

<device>

LinuxFb

 

<subdriver>

VNC

Transformed,Multi

指定子驱动

<RotX>

Transformed

指定屏幕旋转,X的可用值是90 180 270

Offset=<x,y>

Multi

指定子屏幕左上角的坐标(默认是0,0)

QWS_DISPLAY环境变量还可以直接跟在可运行程序下面使用-display 来运行

嵌入式linux Qt的环境变量表

环境变量

描述

POINTERCAL_FILE

指定包含用于校准指针设备的数据文件

详见:QWSCalibratedMouseHandler  Qt for Embedded Linux Pointer Handling.

QT_ONSCREEN_PAINT

如果定义了此环境变量,Qt应用程序将直接在屏幕上显示部件。屏幕驱动程序不会修改屏幕的受影响区域,除非另外一个窗口在同一区域具有更高的焦点请求。设置了此环境变量等同于在Qt应用程序中设置了Qt::WA_PaintOnScreen属性,此属性应用于所有的部件,

可参考Qt for Embedded Linux graphics rendering documentation

QWS_SW_CURSOR

定义此环境变量后软件鼠标光标会总是使用(即使使用了一个支持硬件光标加速的驱动程序)

QWS_DISPLAY

指定显示器类型和framebuffer可见上表

QWS_SIZE

指定嵌入式linux中的Qt应用程序的窗口大小,此窗口以屏幕为中心,

Export QWS_SIZE=<width>x<height>

QWS_MOUSE_PROTO

指定软件鼠标光标的驱动程序。

Export QWS_MOUSE_PROTO=”<driver>[:<driver secific options>]”

driver可用参数:MouseMan; IntelliMouse; Microsoft ;LinuxTP ;Tslib 以及用户自定义的驱动标识。

<driver secific options>:设备描述符/dev/mouse----鼠标设备 /dev/ts----触摸板

另可一次性指定多个鼠标驱动:

Export QWS_MOUSE_PROTO=”<driver>[:<driver secific options>]<driver>[:<driver secific options>]<driver>[:<driver secific options>]”

参考:Qt for Embedded Linux Pointer Handling.

QWS_KEYBOARD

指定字符输入设备的驱动:

Export QWS_KETBOARD=”<driver>[:<driver secific options>]”

driver可用参数:TTY ;LinuxInput以及用户自定义的驱动标识。

<driver secific options>:设备描述符/dev/tty0

QWS_MOUSE_PROTO设备,也可同时指定多个设备,使用方式同QWS_MOUSE_PROTO

参考:Qt for Embedded Linux Character Input.

对于高版本的Qt的安装需要和高版本的arm-none-linux-gnueabi-交叉编译工具相配合,否则在编译源码过程中会有各种奇怪问题。之前使用4.3.3版本的交叉编译工具编译Qt5.8.0的源码的时候就出现了各种奇葩问题,由于交叉编译工具版本无法更换,故使用了Qt4.8.6进行编译安装。

windows环境下使用高版本的Qt进行开发的时候要转而进行嵌入式开发的时候,建议先在windows下使用4.8.6版本的Qt将高版本的代码调试通过后即可对整个工程进行交叉编译。当前工程目录下使用交叉编译之需3步:(可以这样使用qmake的前提是交叉编译版的qmake已经做好了环境变量,否则需要填入完整路径)

1. qmake  -project

2. qmake

3. make

嵌入式程序在板子上运行:

./appname -qws -font wenquanyi &

tslib解压安装:

tslib版本:tslib-1.4.tar.gz

下载路径:http://pan.baidu.com/s/1cLJ3qe

需要用到触摸屏的时候需要使用tslib,具体tslib安装过程中所需要的工具已经记不清楚了,不过配置过程是没问题的,到时候出哪个错了百度一下直接按照相关教程来安装对应的工具即可。

tar -xvf tslib-1.4.tar.gz

cd tslib

./autogen.sh

echo "ac_cv_func_malloc_0 _nonnull=yes">arm-linux.cache

./configure --host=arm-none-linux-guneabi --cache-file=arm-linux.cache --enable-inputapi=no -prefix=/usr/local/tslib

--host:指定交叉编译工具

-prefix:制定安装目录

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在ubuntu16.04搭建Qt4.8.6嵌入式开发环境 的相关文章

  • qt:同一份代码在vs2022 QT VS TOOL扩展和 QtCreator下运行结果不同

    公司要求用的是QtCreator 但是谁能离得开安装了Resharper的VS呢 我就在VS下装了QT的环境 开始编写调试代码 其实是两个软件都在用的 可能是没找到方法 VS下的资源文件显示不是很方便 我就用QtCreator加资源 到后面
  • Qt教程(2) : Qt元对象系统

    元对象是指用于描述另一个对象结构的对象 使用编程语言具体实现时 其实就是一个类的对象 只不过这个对象专门用于描述另一个对象而已 比如 class B class A B mb 假设 mb 是用来描述类 A 创建的对象的 则 mb 就是元对象
  • QT框架简介

    刚开始接触QT开发的时候用的是Qt 5 6 0版本 开发过程中没有仔细了解过Qt具体的框架结构 只负责项目相关模块用C 进行开发和维护 对QT本身没有关注 只是当成一个开发工具而已 随着维护的内容深入 发现来对整个项目缺乏全面的了解 不知道
  • QT+VS配置及调试

    QT下载 https download qt io archive qt QT Creator设置 打开 Qt Creator 进入编译器部分 工具 gt 选项 gt 构建和运行 gt 编译器 可以看到vs的内容 之后 进入 工具 gt 选
  • QT5下获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址

    获取主机名称 名称 get localmachine name 功能 获取本机机器名称 参数 no 返回 QString QString CafesClient get localmachine name QString machineNa
  • QT的UI界面效果预览快捷键

    QtCreator的界面预览 Shift Alt R 运行快捷键 Ctrl R 只构建快捷键 Ctrl B 怕忘了 自己记录一下
  • QObject::connect()函数使用的几个注意点

    一 connect 函数有且只能在QObject类里面和QObject派生类里面使用 connect 函数有且只能在QObject类里面和QObject派生类里面使用 自己新建的类里面 基类不是QObject类和其QObject派生类 使用
  • qt学习笔记1:创建一个qt项目及一些基础知识

    1 新建第一个项目 New Project gt qt widges application 给项目创建名称 名称不能有中文和空格 创建路径中也不能有中文路径 不会报错但是运行时会报错 再下一步 到Kits 中文构建套件 用于选择编译套件
  • qt 中 file generation failure: unable to create the directory

    原因 不能将qt的项目工程安装到qt软件的安装目录中 如 opt 的目录中 解决 应该使用当前系统的普通用户的目录中建立项目目录 如 home chenfan QT myprojects
  • Qt开发,链接了数据库后,调用QSqlQuery::setQuery执行SQL语句获取我们想要的数据

    继上篇文章将数据库封装成一个类 链接为成员函数 而当我将查询做为另一个函数时 无法对已有的database进行操作 尽管db为类的成员 同样会报错误 QSqlQuery exec database not open QSqlQueryMod
  • Ubuntu 18.04 安装Qt5.15.2开发环境

    1 下载Qt在线安装包 地址 Index of official releases online installers 选择Linux版本 右键复制链接地址 在Ubuntu终端 使用下载命令 wget 下载文件 wget https dow
  • QT---窗口、按钮的基本设置

    目录 一 窗口相关的设置及中文编译错误设置 1 在源文件widget cpp中进行修改数据 并创建有关界面 2 如遇中文编译错误 即标题中文显示乱码 可如下设置 3 窗口界面及标题设置 窗口是否拉伸 二 创建按钮的相关设置 1 添加头文件
  • Qt学习笔记(五)【多窗口交互方法】

    在开发应用程序的过程中 难免会遇到多个进行交互的问题 Qt中多窗口交互有多种方式 方法一 利用主窗口指针的方式进行交互 在主窗口中创建子窗口时 会将this指针传递进去 则子窗口就会将主窗口作为父窗口 因此在子窗口中可以通过如下代码获取到主
  • QT学习——Qt工具介绍,Qt助手使用,第一个Qt程序,Qt字符串和字符编码

    一 Qt主要工具介绍 1 qt助手 assistant 2 qt构建器 qmake 3 qt设计师 designer 4 qt转换器 uic 5 qt资源编译器 rcc 6 qt元对象编译器 moc 处理语法扩展 7 qt创造器IDE qt
  • 数据隐藏之Qt中d指针详解

    最近看到代码有用到了Qt中的Q D指针 就去学习了下 发现真的很好用 因此写一篇文章总结下 student h class CStudent public CStudent CStudent private string m name in
  • Qt6教程之三(3) QtWedget自定义控件

    在之前的博客中 我们使用的控件都是Qt官方提供的 对于控件的特性也只能被动地接受 为了打破这种束缚 可以按照自己的想法来定义控件 不过自定义控件必须遵守Qt官方的一套自定义控件规则 在规则之下我们就可以定义属于我们自己的控件啦 QWidge
  • QT信号和槽的实现原理

    信号和槽是qt用于对象之间通信的核心机制 其目的类似于当一个动作发生的时候 需要对这个动作做出相应的处理 类似的还有借助于函数指针的回调机制 通过回调函数完成对此动作的操作 但是如果对一个庞杂的系统 这种回调函数的维护是相当的麻烦和危险的
  • Qt学习11:Dialog对话框操作总结

    文章首发于我的个人博客 欢迎大佬们来逛逛 完整Qt学习项目地址 源码地址 文章目录 QDialog QDialogButtonBox QMessageBox QFileDialog QFontDialog QColorDialog QInp
  • QT基础学习(12)---事件过滤

    文章目录 事件过滤 一 事件过滤 实现该功能的方法就是在目标部件 自定义的图片显示部件 上注册事件过滤器 此时的事件过滤器就是我们所说的监视对象 完成这些步骤之后 当目标部件有事件产生后 首先会传递给监视对象 事件过滤器 进行处理而不是该事
  • Qt

    我的RFID程序中 Widget继承自QWidget 在Widget h中 public定义了数据成员 QTableWidget cardtableWidget 在Widget cpp的Widget构造函数中 初始化了QTableWidge

随机推荐

  • Latex 报错:The font cannot be found.

    Latex报错 Package fontspec Error The font KaiTi GB2312 cannot be found 解决方法 给系统安装 KaiTi GB2312 字体 step1 下载 KaiTi GB2312 字体
  • 关于虚拟机(CentOS 7 )远程连接超时(SecureCRT 软件)、网络服务启动失败的解决方法

    问题 开启虚拟机后 用CRT软件连接虚拟机发现 总是连接超时 connection time out 返回VM 尝试ping一下百度 发现ping不通 然而在windows上ping百度可以ping通 并且在虚拟机上直接ping百度的ip
  • 【R】【数据采集、抽样和预处理实验】

    文章目录 实验思维导图 实验一 1 1 启动 Rstudio 1 2 新建 R Script 文件 1 3 read csv 函数导入数据 1 4 剔除冗余变量 1 5 缺失值处理 1 6 异常值处理 实验二 2 1 启动 Rstudio
  • 解决idea识别不出来项目中某些Maven模块,显示模块为“灰色”

    解决idea识别不出来项目中某些Maven模块 显示模块为 灰色 背景 打开一个Maven多模块项目 发现有些Maven子模块显示为 灰色 解决方式 点击右侧怕 Maven gt 点击 加号 gt 选择灰色模块对应的 pom 文件 本步骤主
  • OpenSSL中文手册之ASN1库详解(未完待续)

    openssl之ASN 1系列之1 引言和ASN 1概述 引言 ASN 1全称为Abstract Syntax NotationOne 是一种描述数字对象的方法和标准 openssl的编码方法就是基于该标准的 目前 很多其他软件的编码方法也
  • vue321

    component切换 div class dashboard container div
  • [PHP面试题]跳槽面试必背-自己最近5年的整理(二)

    看完这些还怕进不了大厂 PHP面试题 跳槽面试必背 自己最近5年的整理 一 PHP面试题 跳槽面试必背 自己最近5年的整理 三 PHP经典面试题集 含答案 面试12家公司 收获9个offer 2020年PHP 面试问题 100 个常见的 P
  • 图解OAuth 2.0协议族(一):授权码 auth code

    最近学习了OAuth 2 0的协议族 获益匪浅 对认证 授权都有了新的 进一步认识 在这里做用序列图记录与总结所有的场景 以共勉 系列全文以资源拥有者授权客户端访问受保护照片访问为例 模拟了多个场景 Oauth是一个授权协议框架 包含多个协
  • NVIDIA-smi

    上图是服务器上 GeForce GTX 1080 Ti 的信息 下面一一解读参数 上面的表格中的红框中的信息与下面的四个框的信息是一一对应的 GPU GPU 编号 Name GPU 型号 Persistence M 持续模式的状态 持续模式
  • 剑指offer-10 二进制数字1的个数

    输入一个int型数字 输出它作为二进制的1的个数 如9的二进制为1001 有2个1 则输出2 法一 因为int型有4个字节 一共32位 每次将输入右移1 并和1进行 与 操作 将结果累加 则为1的个数 public class Test10
  • 二维各向同性介质弹性波数值模拟(交错网格有限差分法)

    一 一阶速度 应力弹性波方程 在二维各向同介质xoz平面内 假定体力为0 从上面方程当中 我们为了得到各点的应力和速度值 就需要得到关于对时间t和空间x z的偏导 二 时间上的2M阶差分 由Taylor公式得 三 空间2N阶近似差分 由一阶
  • 【2023】Python安装教程

    一 Python下载 1 进入Python官网 官网地址 https www python org 2 点击 Downloads 展开后点击 Windows 跳转到下载python版本页面 选择 Stable Releases 稳定版本 我
  • 尤其抖音,不如学习

    什么是我们最宝贵的资源 是钱吗 不不不 我们最宝贵的资源是时间 与其把时间耗费在刷抖音 或者其他没多少价值的事情上 不如多学习一些有用的技能 今天 小灰给大家推荐几个有用的公众号 这些公众号有些是IT相关 有些是教我们如何穿衣打扮 有些是讨
  • 超出表空间"users"的空间限额

    这是因为用户被数据库限制了在建表的表空间 执行一下下面的语句后 再执行建表语句 alter user 用户名 quota unlimited on 表空间名字
  • shell中if多重条件

    if a aa a b bb c cc a d dd then echo success fi
  • APP自动化之weditor工具

    由于最近事情颇多 许久未更新文章 大家在做APP自动化测试过程中 可能使用的是Appium官方提供的inspect进行元素定位 但此工具调试不方便 于是今天给大家分享一款更好用的APP定位元素工具 weditor weditor基于web网
  • linux查看可执行文件的编译器版本

    一部分可执行程序 可以使用这个方法快速确认 strings a program name grep i gcc 输出 GCC Debian 4 8 4 1 4 8 4
  • django/CVE-2017-12794XSS漏洞复现

    docker搭建漏洞复现环境 漏洞原理看帮助文档 Django debug page XSS漏洞 CVE 2017 12794 分析 Django发布了新版本1 11 5 修复了500页面中可能存在的一个XSS漏洞 这篇文章说明一下该漏洞的
  • 挖洞经验

    本文分享的是作者在一次众测中的SQL报错型注入漏洞发现过程 有趣之处在于 在后续漏洞利用的构造中 如果在目标服务端数据库逻辑的INSERT查询中使用逗号 Comma 将导致构造的Payload不可用 这种情况下 作者通过综合Time bas
  • 在ubuntu16.04搭建Qt4.8.6嵌入式开发环境

    环境以及软件版本 虚拟机环境 ubuntu16 04 64位 虚拟机环境中gcc的版本 gcc version 5 4 0 20160609 Qt版本 qt everywhere opensource src 4 8 6 tar gz 下载