Linux编译Qt4的环境_OMAPL138

Linux编译Qt4的环境_OMAPL138

手里有一块创龙OMAPL138的板子,我要在上面成功移植Qt环境和触摸屏幕,这是我第二次进行Linux的Qt环境移植,发现了很多问题,需要重新整理。 我编译了,Qt5版本以上的,结果就是不成功,总是死在PDA问题上,在 configure文件上加入-xcb的选项,就算我安装了xcb所有的库文件,最后还是出问题,我还在研究之中,等着编译Qt5通过之后,我会重新写一个Linux编译Qt5的环境。

本文不适合配置Qt5的环境,不要用在Qt5上

准备

  • 交叉编译环境(一定要找到适合你板子的交叉编译环境)
  • Qte嵌入式源代码,文件的名字如同:qt-everywhere-opensource-src-4.8.6.tar.xz


我的环境

  • PC 机: Ubuntu16.04 (64bit)
  • OMAPL138提供的交叉编译工具链:arm-arago-linux-gnueabi http://www.veryarm.com/arm-none-linux-gnueabi-gcc
  • PS:不同平台的交叉编译工具链不同,基本上芯片厂商出一个ARM芯片,就配套一个交叉编译工具链。
  • PS:最好检测板子是否支持整个工具链的方式就是编写一个最简单的hello word程序,然后到目标板子上运行,能够运行出来就说明这个交叉编译环境对劲儿。
  • Qt源码: qt-everywhere-opensource-src-4.8.6.tar.gz

*下载地址:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/ 进入目录./4.8/4.8.6/single 找到这个文件。

  • tslib 1.4 触摸屏幕支持库:tslib1.4

交叉编译环境配置

其实也可以不进行配置,反正后面我们在编译器名称的时候都用绝对路径

在本文中我就直接写交叉编译环境的路径按照我电脑上的配置了,如果配置你的话注意灵活修改路径:

我的放在了:/home/delvis/opt/toolschain/omapl138 文件夹中

编译tslib1.4

对触摸屏信号的获取、校正、滤波处理,均采用开源的tslib,本文采用的tslib版本为最新的tslib1.4(可以从本文提供的链接中下载tslib1.4)。

1.将下载好的tslib1.4拷贝到/home/lz/transplant目录下(可以根据自己的系统选择某一目录),然后执行解压缩命令

tar -vxf tslib-1.4.tar.gz

切换到tslib目录:

cd tslib

安装交叉编译tslib必须的一些工具(可以先查看是否已安装,ubuntu16.04自带这些工具,可跳过)

sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

2.利用脚本写编译过程

在tslib文件夹下新建文件configTslib14.sh

touch autoconfig.sh
vim autoconfig.sh
chmod 777 autoconfig.sh

内容如下:

#!/bin/sh
make clean && make distclean

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

CC=/home/delvis/opt/toolschain/omapl138/arm-none-linux-gnueabi

./configure --host=arm-linux --prefix=/home/delvis/opt/tslib1.4 --cache-file=arm-linux.cache

make && make install

这里面需要注意的地方就是:

  • CC=/home/delvis/opt/toolschain/omapl138/arm-none-linux-gnueabi 这个位置一定要修改成你的交叉编译环境的路径。
  • --prefix=/home/delvis/opt/tslib1.4 这个是编译好输出的路径,这个位置要注意了,很多网上的教程输出到的/opt/tslib1.4 这个路径,但是这个/opt的文件路径需要的权限是root,而我们编译运行的时候的路径没有使用root用户或者没有加sudo,所以这里推荐不要直接输出到/opt文件夹,而是自己的用户文件夹。

然后运行

./autoconfig.sh

执行结束后,我们查看一下是否安装成功,执行命令:

ls /home/delvis/opt/tslib1.4

如果出现bin,etc,include,lib这4个目录,如下图所示,说明交叉编译并安装tslib成功。 这个先放在这里了。

然后开始我们的重头戏,交叉编译Qt

交叉编译QT4.8.6

交叉编译Qt成功之后,编译后的文件需要应用两个位置,一个部分需要移植到我们的开发板上,另一个部分需要把编译成功的库配置到我们运行QtCreator的PC机上,两个部分只有统一了才不会出问题。

1)准备好Qt的源码文件

将下载的qt-everywhere-opensource-src-4.8.6.tar.gz执行如下命令解压:

tar -vxf qt-everywhere-opensource-src-4.8.6.tar.gz
cd qt-everywhere-opensource-src-4.8.6

2)配置源码文件

创建架构信息:

  • 进入架构信息路径 (qt4的源码路径一般是)

cd ./qtbase/mkspecs/qws

  • 创建一个文件夹(ps: 预告以下这个文件名会影响到后面的配置,这个东西我搞了很久

mkdir omapl-g++

  • 进入这个文件夹并创建两个文件

cd omapl-g++; touch qmake.config qplatformdefs.h

  • 修改qplatformdefs.h ,直接把下面这个粘贴上去,只有这一句。
#include "../../linux-g++/qplatformdefs.h"

如果发现在编译过程中提示找不到qplatformdefs.h整个文件,就在mkspec/qws文件夹的其他架构信息的文件夹,看看人家的怎么写的是什么路径,基本上就是你的路径。

  • 修改交叉编译架构用到的信息:
gedit qmake.conf

在qmake.conf文件中需要注意以下信息:

  • QMAKE_CFLAGS_RELEASE += O2 -march=xxxxx,就是整个march要注意自己的平台是什么架构的,比如说arm9基本上就是arm5te,cortexA8都有不一样的架构,整个地方必须写正确,否则当我们搭建好交叉编译环境编译Qt工程然后运行的时候,就会出现illeagle instruction. 的错误提示。也有些配置文件没有指定这个信息,最好也写上。
  • 我在这里的时候,即便是配置了交叉编译环境,还是提示arm-linux-gnueabi-gcc找不到,而我单拿出来在命令行上面 arm-linux-gnueabi-gcc -v 的时候还能显示出来,我换了四种方法配置交叉编译环境,重启N次还是不见效,所以我在qmake.config文件上做了手脚,使用绝对路径进行配置,没想到编译通过了,所以我建议在qmake.config文件上使用绝对路径。
  • 后面的include也是,看看mkspec/qws/中的寻文件的路径是什么,可能是前一层的目录,也可能是前两层的目录。
#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb #eglfs

#Compiler Flags to take advantage of the ARM architecture
#Run the linux terminal command "arch" to see the detail your target cpu arch information.
QMAKE_CFLAGS_RELEASE += -O3 -march=armv5te
QMAKE_CXXFLAGS_RELEASE += -O3 -march=armv5te

include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)

# modifications to g++.conf
QMAKE_CC                = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-gcc
QMAKE_CXX               = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++
QMAKE_LINK              = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-objcopy
QMAKE_NM                = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-nm -P
QMAKE_STRIP             = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-strip
load(qt_config)

3)创建configrue的执行文件

回到qt的顶层目录,创建一个脚本文件,用于生成Makefile,执行命令

gedit run.sh
chmod 777 run.sh

输入下面内容并保存:

./configure -prefix /home/delvis/work/qt-arm-4.8.6 -embedded arm -xplatform qws/omapl138-g++ -no-webkit -qt-libtiff -qt-libmng -no-neon -qtlibinfix E -nomake examples -lrt

其中

-prefix /home/delvis/work/qt-arm-4.8.6代表我们编译完QT后要安装地址(这个文件需要用到两个地方);你可以根据自己需求进行配置编译,去掉不需要的部分,留下需要的部分,比如:增加-tslib代表QT对触摸板的支持,-I 和 -L后面分别为为第一步编译tslib的include和lib的安装目录。 (这里暂时不给这些)

执行命令:(这里推荐用sudo,管理员权限进行配置和编译,很多小伙伴遇到工具链中有一个东西没有调用的权限,结果搞了好久才搞明白,所以这里为了防止发生这样的问题,我们直接使用sudo

sudo ./run.sh

上述命令自动生成Makefile文件。

*)说几个坑

在编译之前需要检查一下Qt的编译环境有没有配置好,主要还是一下几个方面:

  1. 在命令行输入: export
  2. 然后输出几个找到QMAKESPEC这个,如果有这个,我们就要把它删除掉,否则就会很蛋疼。我们使用export -n QMAKESPEC 这个命令,把这个环境变量在当前的命令窗口下删除,这样就不影响我们编译了。

4)开始编译

执行命令启动编译:(8线程编译,如果你的CPU受不住8线程你可以用双线程 -j2参数,-几就是几线程编译)

sudo make -j8

我的大概能编译10分钟左右,此时CPU利用率达到100%,温度如果是笔记本的话,超级高。编译时间根据你的配置多少来决定。编译的过程不可能是一帆风顺的,总会出现各种各样的错误,如果出现编译错误,那么就去百度解决。

编译结束后,执行安装命令:

sudo make install

我们切换到-prefix设定的目标目录下看看是否安装成功:

cd /home/delvis/work/qt-arm-4.8.6
ls

如果在bin目录出现了qmake基本上就成功了。

配置PC的QtCreator

这个部分不在赘述,我找到http://blog.csdn.net/u012175418/article/details/52704734 引用这个博客的“设置QT的交叉编译环境”,部分,按照这个步骤在PC机的Qt上面配置好我们刚编译的组件和刚刚编译Qt的交叉编译环境。

拷贝文件到目标板并配置环境

1)传输Qt4.8.6到开发板

就是把我们刚才编译的环境拷贝到我们的目标板的目录下,可以使用FTP,可以使用OTG挂在U盘的方式,我喜欢使用SSH协议的scp命令。

sudo scp -r /home/delvis/work/qt-arm-4.8.6 [email protected]:/opt 输入密码之后就可以把整个文件夹传输到开发板上面了。

2) 配置开发板的环境

我们传输完毕之后,则需要在开发板上设定环境,当我们运行qt程序的时候才能寻找到这些Qt库文件。

打开

vi /etc/profile

增加以下,需要注意的是QT_ROOT,写对Qt的路径,还有TSLIB_ROOT编译的是tslib的路径。

export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt-arm-4.8.6
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib 

完成之后,更新一下环境。

source /etc/profile

完成配置。

3)测试

我们利用Qt Creator制作一个简单的界面,然后编译出可执行文件,讲可执行文件传输到目标板子上面执行,我们的可执行程序叫做TestEM,需要qws参数。

./TestEM -qws

然后就可以看见界面了。

参考文献:

http://processors.wiki.ti.com/index.php/Building_Qt

原文地址:https://www.cnblogs.com/sigma0/p/8168313.html

时间: 2024-10-28 23:40:16

Linux编译Qt4的环境_OMAPL138的相关文章

Linux下Qt4.5.3开发环境搭建

操作系统:Ubuntu12.04 搭建环境:Qt4.5.3开发环境--编译库文件和qmake工具 ①到http://download.qt.io/archive/qt/4.5/网站下载编译源文件,然后放到Ubuntu系统里进行解压: tar –xzvf qt-x11-opensource-src-4.5.3.tar.gz tar –xzvf qt-embedded-linux-opensource-src-4.5.3.tar.gz 这两个源码包的作用:QT-X11-4.5.3是运行于linux平

Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)

参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Linux重度使用者,受够了MFC之后一直想要找一个框架替换,使用过GTK,wxWidgets,Qt,最后还是Qt用得多一些.我认为程序跨平台应该是一个基本标准,同一份代码不需改动,或者改动极少,放在不同的平台下编译就能使用.不同平台,同样的界面,同样的操作,同样的体验.这里要讲的是我如何在Linux 下开发跨

【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 本课程重点是给大家讲解嵌入式linux系统移植的开发方法,采用理论与实践,硬件与软件相结合的方法. 1.在每节开始之前先简单回顾上一节所讲的主要内容,并对本节所讲的内容先进行概述,讲解概念.技术要点,设计实现思路等内容,最后总结本次课程的要掌握的要点. 2.在讲课的过程中对关键技术

使用VS2005安装和编译QT4.53源码

学习Qt,当然是QT4好.可是装了4.86以后,网上下载的书中的例子大多无法直接用VS执行(个人不喜欢用QT Creator),即打开pro转换的时候出错(我也懒的研究为什么出错了).看了一下发布时间,觉得4.53时间比较合适,是2009年末发布的.也许能运行书上的例子. 因为很懒,所以不想编译QT源代码,最好装上就能用.所以下载了qt-win-opensource-4.5.3-mingw.exe,安装报错,说找不到mingw.所以又下了MinGW-5.1.4.exe,这是个在线安装版本,我非常

Windows平台上编译Qt-4.8.x Debug版注意事项

Windows平台上编译Qt-4.8.x Debug版注意事项 跳转至: 导航. 搜索 目录 1 为什么要编译qt-4.8.x的Windows Debug版? 2 1 MSVC版本的选择 3 2 WinRAR的问题 4 3 qmake子项目裁剪 5 4 调试QtWebKit 0 为什么要编译qt-4.8.x的Windows Debug版? 目的:为了方便调试qt的代码!VS比Linux gdb好使多了. 1 MSVC版本的选择 最好使用VS2008+,它的安装包自带了Windows SDK,不要

用mingw静态编译Qt4.8.2和Qt5.1.1(需要修改不少源码)

因为一些乱七八糟的原因,我需要用mingw静态编译Qt4.8.2和Qt5.1.1.经历了一天的折腾之后,自觉编译一下Qt还是件颇为麻烦的事情,故将过程略作总结,以备不时之需. 首先,在编译之前,我需要下载mingw.qt-everywhere-opensource-src-4.8.2和qt-everywhere-opensource-src-5.1.1. 然后,准备开始编译了,当然先得把压缩包解压到一个合适的地方.我这里的路径是"C:\Qt"下面. 解压完毕后,先试着编译Qt4.8.2

Windows下MinGW编译Qt4

还真不是吹,这个问题折磨我一天……前些天转载了一篇关于<Eclipse+Qt开发环境设置>和<Eclipse+MinGW+Qt开发环境设置>两片文章,里面讲述了QT的开源版本qt-win-opensource-4.x.x-mingw.exe 在Windows下的安装步骤,但我的是qt-win-commercial-src-4.x.x.zip,一顿百度.谷歌……结果还都是关于Qt开源版本的介绍,如何在MinGW开发环境编译成了今天的话题. 安装MinGW或者DEV-CPP,设置环境变

源码编译搭建LAMP环境&#160;

源码编译搭建LAMP环境  一.将 LAMP 相关软件包上传刡 linux 上 [[email protected] ~]# ls anaconda-ks.cfg      install.log         mysql-5.5.30.tar.gz  公共的  视频  文档  音乐 httpd-2.2.25.tar.gz  install.log.syslog  php-5.4.14.tar.bz2   模板    图片  下载  桌面 1. 安装apache [[email protect

Linux下各种常见环境变量的配置

Linux系统下各种环境变量都通过修改/etc/profile文件来实现.由于是系统文件,修改此文件需要root权限.因此实现以下功能都需要用户拥有root权限. 另:不要轻易修改profile文件中的现有内容.应在保证原有内容不变的前提下,在文件的最后插入新的一行. 1.路径变量PATH 当用户在某工作目录执行一个命令或者可执行程序时,若当前路径下不存在该程序,则系统将从PATH路径列表中查找指定的应用程序.还记得java命令,ping命令么?这些应用程序所在的文件夹都包含在了PATH路径中.