Qt4.8.6 Embedded Linux 的编译与移植

article/2025/10/3 12:28:51

        最近买了个飞凌ok6410 的开发板,于是在其中搭建qt4.8.6运行环境。费了两三天时间,主要还是对linux系统的生疏,在一些问题上徘徊很久,在这里做一些过程笔记。烧写ARM-Linux系统,根据飞凌官方的用户手册成功为开发板烧写了U-boot、kernel3.0.1、以及rootfs.yaffs(均由飞凌官方提供)

编译环境:

PC:Ubuntu12.04 LTS,Vmware Workstation 10.0.5 build-2443746

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

tslib:未使用开发板提供的tslib1.4

交叉编译器:arm-linux-gcc-4.3.2


编译准备:

1.依赖包安装

纯净版的Ubuntu没有g++需要先安装:

apt-get install g++

另外很多参考资料中安装如下几个依赖包:libX11-dev libXext-dev libXtst-dev,虽然不知道具体依赖关系,安装上总不会错。命令:

apt-get install libX11-dev libXext-dev libXtst-dev

2.交叉编译器:

        最开始采用arm-linux-gcc-4.4.3版本交叉编译qt4.8.6的过程十分顺利,但将库移植到ok6410开发板后,运行使用qt4.8.6编译的程序,报错:GLIBC2.9 not found,经过多番查实,主要问题在于飞凌官方提供的文件系统所使用的glibc(2.8)与Ubuntu12.04的glibc(2.15)的版本不匹配,于是试图去升级开发板glibc版本,但水平有限无果(如果没有把握自己定制内核、文件系统,而且时间紧迫的情况下,不建议去折腾,学习目的除外)。最后交叉编译器使用的是4.3.2版本

3.关于tslib版本的几点说明:

        最开始使用的是开发板提供的tslib1.4,tslib的交叉编译安装过程十分简单。但在移植qt库和环境变量后,运行交叉编译的qt程序,arm开发板显示屏可以呈现程序界面,说明qt库移植基本OK,但触摸屏无法移动,并且超级终端显示错误 "Couldnt load module pthres QWSTslibMouseHandlerPrivate: ts_config() failed with error: 'No such file or directory' Please check your tslib installation!",网上一些资料提到可能是开发板提供的tslib版本太旧了,抱着试一试的心态,下载了最新的tslib,最后就没出现上述问题,也说明了我的环境变量设置的正确性。


这样获得的tslib源代码是最新的,目前是稳定版本。 

Tslib和Qt在开发板上的移植

主要参考博客:

http://www.cnblogs.com/Jasonsblog/p/3757985.html或者http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html;

另外风间一叶的《linux arm Qt 移植配置 一键推送远程调试 视频教程 》;

qt4.8.6编译过程中遇到的问题:

1)缺少链接库:

/usr/local/tslib/lib/libts.a(ts_load_module.o): In function `__ts_load_module':
ts_load_module.c:(.text+0x80): undefined reference to `dlopen'
ts_load_module.c:(.text+0x90): undefined reference to `dlsym'
ts_load_module.c:(.text+0xf0): undefined reference to `dlclose'
ts_load_module.c:(.text+0x120): undefined reference to `dlclose'
ts_load_module.c:(.text+0x158): undefined reference to `dlclose'
collect2: ld returned 1 exit status
make[1]: *** [../../lib/libQtGui.so.4.8.6] 错误 1
make[1]:正在离开目录 `/lsj_pro/qt-everywhere-opensource-src-4.8.6/src/gui'
make: *** [sub-gui-make_default-ordered] 错误 2

     解决方案:

修改./src/gui/Makefile

...
LIBS          = $(SUBLIBS)  -L/usr/local/tslib-1.4/lib -L/home/work/qt/qt-4.7.0-arm/lib -lQtNetwork -L/usr/local/tslib-1.4/lib -L/home/work/qt/qt-4.7.0-arm/lib -lQtCore -lpthread -lts
...

在末尾添加库 libdl 库,这个库用于动态连接库的操作:
...
LIBS          = $(SUBLIBS)  -L/usr/local/tslib-1.4/lib -L/home/work/qt/qt-4.7.0-arm/lib -lQtNetwork -L/usr/local/tslib-1.4/lib -L/home/work/qt/qt-4.7.0-arm/lib -lQtCore -lpthread -lts -ldl
...


保存后退出,切换至源码目录下继续make -j4。

2)undefined reference to `__sync_sub_and_fetch_4':

造成这个原因主要是gcc版本问题。

          解决方案(http://blog.csdn.net/zpzkitt/article/details/8970626):

1.下载gcc源码:我后来使用的4.4.3的(系统自带的gcc-4.6.3的貌似用不成),解压,在gcc-4.4.3/gcc/config/arm/目录下找到一个linux-     atomic.c;

2.制作链接库:使用libtool制作,输入命令 

libtool --tag=CC --mode=compile arm-linux-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 arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo

这一步会在当前目录生成.libs目录;

3.将生成的库拷贝到一个比较短的目录,比如/opt:

cp .libs/liblinux-atomic.a /opt

4.修改Qt的Makefile:

进入Qt源码目录:

cd qt-everywhere-opensource-src-4.8.6

然后:vim src/script/Makefile

修改:在LIBS  = 。。。。。。。。。。。。。的结尾添加-L/opt  -llinux-atomic

          保存,继续make -j4,最后执行make install就OK了。

移植库至开发板并设置环境变量

  1. /usr/local/tslib/etc/ts.conf拷贝至开发板/etc/,切换至/usr/local/tslib/lib/目录,将除pkconfig目录外的文件拷贝至开发板/lib/;
  2. 打包qt库,我用了别人写好的一个脚本mk_qt4_target,打包好在当前目录生成压缩包target-qte-4.8.6.tar.bz2,拷贝至开发板根目录,解压即可在/usr/local/下看到需要的qt库文件;
  3. 环境变量脚本qt4_en.sh,内容如下:

#!/bin/sh
if [ -c /dev/input/event2 ]; then
INPUT_PATH=/dev/input
elseINPUT_PATH=/dev
fi
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QTDIR=/usr/local/Trolltech/QtEmbedded-4.8.6-arm/
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib
export QWS_MOUSE_PROTO="Tslib:$INPUT_PATH/event2"
#export QWS_MOUSE_PROTO="Tslib:$INPUT_PATH/event2 MouseMan:$INPUT_PATH/mouse1"
export QWS_KEYBOARD=TTY:/dev/tty1
#sync font size with QtDesigner 
export QWS_DISPLAY="LinuxFB:mmWidth200:0"
export QWS_SIZE="480x272"
export KDEDIR=/opt/kde
export HOME=/root

以上是我的开发板配置,具体的设置还需要根据开发板硬件做相应的修改。

运行测试:

在QtCreator3.3.0中设计简单UI,并编译拷贝至开发板运行,应用程序名:helloworld 

运行:

    ./helloword -qws
效果如下,点击触摸屏有反应,鼠标箭头可以移动





http://chatgpt.dhexx.cn/article/Ea4HNZly.shtml

相关文章

麻辣香锅病毒处置

麻辣香锅病毒介绍 “麻辣香锅“病毒由于其早期版本病毒模块所在目录为” Mlxg_km “因此得名,该病毒通过小马激活,暴风激活,KMS激活等激活工具进行传播,用户中毒后首页会被劫持到病毒作者预设的跳转链接 病毒恶意行为流程图&…

【原创】ES5高效封装WIN10系统教程2020系列(三)母盘安装及系统调整

** 本教程共有7个系列 ** 1. 母盘定制 2. 准备封装环境 3. 母盘安装及系统调整 4. 使用工具优化与清理 5. 常用软件安装及设置 6. ES5封装 7. 测试效果 母盘安装没有什么难度,第一章系统定制已经得到了精简的install.wim母盘映像文件,并且已经拷贝到数…

Exp2 后门原理与实践

20155332《网络对抗》Exp2 后门原理与实践 1.实验环境 主机一台联想台式机,安装有win10系统 。安装的kali虚拟机为攻击机。我的win10系统作为靶机。(建议再安装一个虚拟机作为靶机,不要像我这么做。我电脑有点卡,就没有安装那么多…

Win10正式版激活方法有哪些?如何激活Win10?

很多用户都想将系统升级到Win10,但是却不知道怎么激活Win10正式版的方法,其实不同版本激活正式版Win10的方法秘钥不同,下面99安卓网小编就分享一些激活Win10正式版的方法和秘钥,供大家参考。 目前win10正式版已经发布,相信已经有非常多的Win7/Win8.1用户升级安装了Win10正…

win10一键激活,解除SymantecEndpointProtection的自动拦截

破解背景: win10系统,电脑预装有SymantecEndpointProtection安全软件,每次采用小马KMS等激活工具激活系统的时候回自动拦截掉,贼烦。 破解原理: 相关原理可查看来自蓝点网的转载连接:https://mp.weixin.…

Windows常用软件推荐

前言 很多人都认为我是计算机高手,其实我只会帮你修理下你的电脑啦,曾几何时我也帮助过好多好多的同学和老师,尝试和体验各种各样的软件,但谁又能想到我曾今也对你们的电脑做过很多失败的坑爹操作,把你们最宝贵的数据撸得灰飞烟灭,这里要感谢当时允许我不断尝试失败的大…

第二十三期:你用的Windows操作系统是不是盗版?微软知道吗

长期以来,一些小白对于微软操作系统的“正版”“盗版”“原版”的含义不太明确,从根本上说Windows原始版权属于微软,我们没有那个技术去开发盗版操作系统,很多人用的可能是二次修改的版本,而操作系统的激活方式,决定其成为正版或者盗版。 长期以来,一些小白对于微软操作…

俺可爱的小马,差点被淹了

时间:2008年8月6日,下午 地点:北京中关村软件园 一场突然急速的暴雨,在短短十几分钟的时间内,就起水二十多厘米深,眼看水快漫过我的“白色小马(千里马)”的排气管,只好冒…

WIN10 解决“无法完成操作,因为文件包含病毒或潜在的垃圾软件”

新装了win 10 系统,一路遇到了一堆的问题,有空详述 今天在激活的时候 ,本来想找个产品密钥激活,但是找了很多个都不能成功,最终选择下载激活工具 第一次下载了KMSpico小马激活工具,解压安装系统提示 傻夫…

快速搭建一个简易的KMS 服务

xu言: 之前,闹的沸沸扬扬的KMS激活工具自身都存在问题的事。让我们对以前的什么小马激活、kms激活、各种激活工具都去打了一个深深的“?”,到底哪些能用。哪些不能用。有些还注明的里面必须要关闭杀毒软件,以免误杀。。…

.Net jsc.exe 编译js 成exe

转载于:https://www.cnblogs.com/cjm123/p/10315736.html

QT【QWidget和QML混合使用】

Qt Widgets、QML、Qt Quick的区别简述 看了之前关于 QML 的一些介绍,很多人难免会有一些疑惑: Q1:QML 和 Qt Quick 之间有什么区别? Q2:QtQuick 1.x 和 QtQuick 2.x 之间有什么区别? Q3:为什么要…

ubuntu20.04编译安装qt5.14.2和qtcreator4.12.0

编译qt5.14.2 本来编译安装的是qt5.15.2,编译安装ok,一切就绪,安装qtcreator安装后一直报错,“以下插件有错误,无法载入:QmlDesigner QmlProfiler ,插件初始化失败:cannot Create…

cocos2d-js 手游解密jsc和http数据aes加密解密分析①

分析流程 1.查看游戏引擎类型 2.安装游戏 3.抓包分析 4.ida分析so文件 5.获取密钥解密 6.分析解密后源码 7.验证分析结果 解密工具:jsc解密1.44.zip-其它文档类资源-CSDN下载cocos-jsc解密加密程序,需知道key,这些可以通过ida或Frida获取,支持最新更多下载资源、学习…

js 加密 为jsc

从Cocos2D-X v2.1.4版本开始,增加了Cocos2D-console命令行工具,该工具的其中一个功能是:把.js文件转换为.jsc文件,该文件是字节码格式,可以提高代码的安全性。 使用这个工具的方式很简单。以引擎自带的TestJavaScript项…

android cocoscreator jsc js 间加解密(六)

前言 前面 学了 aandroid cocoscreator 热更新 超详细篇(五) 这章 主要学习 cocoscreator 构建后 jsc 与js 文件 之间相互转化(加解密)并实际测试. 可以配置cocoscreator热更新使用 1: 准备 win7 64位 cocoscreator2.0.10 &#…

jsc反编译以及二进制修改

参考:https://www.52pojie.cn/thread-814217-1-1.html 最近碰到jsc的游戏,游戏中有跳过功能但有限制,想着对游戏进行修改达到无条件跳过。 首先,反编译jsc文件,使用这个工具https://github.com/irelance/jsc-decompile…

jsc反编译工具编写探索之路

对于经常做游戏安全逆向的读者来说,可能会经常遇到Cocos2dx编写的游戏。这个国产开源的游戏开发引擎支持多种编程语言进行游戏开发:发括主流的C/C/JavaScript/Lua,之前,与大家讨论的Lua软件安全系列的文章,讨论的是采用…

vue.jsc初体验

Vue 1.安装脚手架 (1)npm install -g vue-cli (2)Vue -v //查看是否安装成功 (3)Vue init webpack name(名称) (4)Npm install (5) (6)Npm install (7)Npm run dev 2.用vue构建项目笔记3(引入jquery和bootstrap) 其实用了vue以后,并不建议再去用jquery. vue是视图…

jsc转js工具使用方法

近日难得手闲写了这个小工具,发上来让大家参考参考。之前没有写详细使用说明,这里补一下 进到工具的文件夹下,直接执行exe可以看到要什么参数 这个新弹出的窗口可以直接关闭,这个只是让你看它需要什么参数的 2.所以如果你要解密…