Qt交叉编译与移植

 之前做过关于QT的移植和相关的编程工作,简单的介绍一下,方便以后在开发板上的应用程序的开发。由于移植的QT版本比较高,所以工作相当的繁琐。
Qt的编译过程:

(1) 下载安装文件

登录Qt官方网站,在下载专区里,下载qt-embedded-linux-opensource-src-4.5.2.tar.bz2文件,放在指定的目录下。

获取交叉编译器的安装文件:4.3.1-eabi-armv6-mv20081010.tar.gz。

(2) 安装交叉编译器

首先,找到相应的安装文件包,解压该文件:

#tar xvf 4.3.1-eabi-armv6-mv20081010.tar.gz

然后,创建如下目录:

#mkdir -p /usr/local/arm

#mv 4.3.1-eabi-armv6-mv20081010 /usr/local/arm/

再修改环境变量:

#export PATH=$PATH:/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-

接着,手动修改添加执行文件:

vi ~/.bash_profile

我的Linux 系统环境如下:

PATH=$PATH:$HOME/bin:/usr/local/arm/4.3.1-eabi-armv6/usr/bin

LD_LIBRARY_PATH=/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/

4.3.1-eabi-armv6/mpfr/lib

export PATH LD_LIBRARY_PATH

unset USERNAME

LANG=en

最后,执行source命令式设置生效:

#source ~/.bash_profile

(3) 编译安装tslib1.4

① 安装编译过程需用到的程序

# apt-get install autoconf

# apt-get install automake

# apt-get install libtool

② 配置编译

# tar xzvf tslib-1.4.tar.gz

# cd tslib

生成./configure

# source autogen.sh

#./configure–prefix=/usr/local/tslib/–host=arm-linuxac_cv_func_malloc_0_nonnull=yes

# make

③ 安装

# make install-strip //生成瘦身应用程序和库

打包:

# tar czvf tslib.tar.gz tslib

④ 复制到NFS文件系统/usr/local目录下解压

# tar xzvf tslib.tar.gz

⑤ 设置环境变量,校准触摸屏。

在天开板终端建立脚本文件,并执行:

export TSLIB_ROOT=/usr/local/tslib

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_FBDEVICE=/dev/fb0

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

注意:触摸屏的前提是你的触摸屏驱动加载进了内核.

可以测试有没有加载触摸屏驱动,cat /dev/input/event0。点击触摸屏,看终端有无显示,若有则表明正确。

在开发板/usr/local/tslib/bin目录下执行校准触摸屏程序:

# ./ts_calibrate

当然,也可以运行此目录下的其他程序进行测试。

(4) 移植流程

通过浏览README文件,可以了解到Qt编译的整个过程。首先是要按自己的实际需求配置Qt源文件,然后指定特定的交叉编译器对Qt源文件进行交叉编译,接着在安装到指定的路径下,最后把生成的,编译通过的Qt文件系统拷贝到相应的目标平台上,并且配置相应的环境变量,使得Qt文件系统移植成功。

(5) 详细了解配置参数

经过上述分析,根据自己定制的要移植的Qt文件系统的配置。我使用的实际配置命令如下:

./configure -release -shared -fast -qt-sql-mysql -plugin-sql-mysql -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-svg -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -make tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype depths16,18 –qt-mouse-tslib –L/usr/local/tslib/lib –I/usr/local/tslib/include

在配置过程中,需要选择开源模式,并且同意相应的选项提示,才能顺利通过Qt文件系统的配置操作。

在Qt文件系统编译的配置过程,是最耗费时间和精力的工作了。我在实际的编译过程中,就是因为编译之前的配置不够合理,出现了很多的问题。配置参数不合理,不能达到最后移植的要求,导致我编译Qt文件系统多次。所以,在Qt编译配置时候,一定要认真分析每个参数的作用,还要细心发现编译过程中的错误,善于修改一些相关文件的不合理内容。只有这样,才能够成功的编译Qt文件系统,为下一步的移植工作做好准备。

(6) 编译与移植

在配置Qt文件的编译参数后,在Qt文件系统的主目录下,运行make命令即可启动Qt源码的编译。这个编译过程是十分漫长的。在编译的过程中,起初是有PC机上的gcc编译器编译相应的文件的,过后系统会自动使用相应的交叉编译器来编译后面的部分,并且生成可移植的目标Qt文件系统了。

在编译的过程中,可能会出现一些错误,并且错误的形式还是不尽相同的。这就要求我们根据出现的错误一个一个解决才行。最常用的解决方法,就是删除原有的安装文件,因为往往执行重新配置命令后,依然不能彻底的解决问题。再重新解压安装文件,进行再配置。常见的问题有configure配置时候出现:SQL enable supported in test files……的问题。我们可以首先进入config.test文件夹中,修改complie.test文件中的内容,在最后几行上,注释掉make disclean相关的内容。然后,到MySQL源文件中先进行交叉编译,生成目标文件,这样就可以避免重复被编译了。所以,问题就会被解决了。当然,在编译的过程中,也会遇到其他种类的问题的,针对不同的问题使用不同的解决方法,正常的情况下,都会顺利通过编译的。

移植的过程相对来说是比较简单的。把Qt交叉编译好的文件,挂载到ARM开发板的相应路径下,配置QT相关的环境变量就可以了。

 

结果检测

在Qt文件系统交叉编译之后,必须通过把其移植到ARM开发板上,才能检测其是否编译成功了,这也是必须做的一步。

(1) minicom配置

在终端中,直接配置minicom。

① 在root用户下,执行minicom –s 命令,进入minicom配置界面;

② 进入配置界面后,ctrl+A~Z是选择配置的各个功能栏;

③ 由于我使用的是笔记连接ARM开发板,所以要用到的是U口转串口的连接线,也就是我要配置的端口不是通常情况下的串口,而是USB口。所以,串口号选择为:/dev/ttyUSB0即可。

④ 其他项的配置:波特率为115200 8N1,Hardware Flow Control设为NO 等。

⑤ 配置完成后,重新启动minicom就可以连接到ARM开发板上了。

(2) nfs-server安装与配置

① 安装

在终端中,执行如下命令:

$sudo apt-get install nfs-kernel-server;

输入密码即可。

② 配置

配置nfs服务很简单,主要修改相应的配置文件,再重新启动nfs服务就可以了。利用vi编辑器修改配置文件,即/etc/exports文件。在文件中,加入PC机上要挂载到开发板的文件目录,并制定授权的ip地址和操作权限。配置好之后,重新启动nfs服务既可以生效了。启动命令是:/etc/init.d/nfs-kernel-server restart 。这样操作之后,就可以把相应的文件挂载到开发板上了。注意,挂载之前,应该通过minicom把开发板的ip地址改为和PC机的ip地址处在同一网段上才可以。

(3) ARM开发板上的环境变量配置

ARM开发板上Qt文件系统的相关环境变量设置如下:

QTDIR 为Qt根文件目录;

LD_LIBRARY_PATH 为QTDIR/lib;

QT_QWS_FONTDIR 为 QTDIR/lib/fonts。

… …

(4) 程序测试

在PC机上,利用Qt-Creater编写一个简单的Qt图形界面的应用程序,以备测试使用。开启终端,进入此应用程序的路径下,执行make clean命令,在删除可执行文件和相应的Makefile文件。在使用上述交叉编译生成的可移植的Qt文件系统中的/bin/qmake命令,重新编译此应用程序。

具体的操作步骤如下:

$/usr/local/Trolltech/QrEmbedded4.5.2/bin/qmake –project

$/usr/local/Trolltech/QrEmbedded4.5.2/bin/qmake

$make

这样,将此可执行文件挂载到开发板上,关闭开发板自带的Qt进程(使用kill命令),设置好开发板的环境变量后,即可运行此程序了。

利用minicom输入运行应用程序的命令,例如:./xxxx –qws 。 如果,在开发板的屏幕上显示该应用程序产生的图形界面,就证明Qt文件系统编译与移植都成功了;否则,就是编译或者移植的过程中存在问题,还需要从开始编译Qt的地方找问题的出处,进行重新编译和移植工作。移植Qt文件系统,是一个相当麻烦而且消耗时间的工作,必须不厌其烦的进行调试和重新编译的。也只有这样,才会最终实现Qt的成功移植。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交叉编译是指在一种平台上编译出另一种平台可执行的代码。Qt是一个跨平台的用户界面开发框架,GStreamer是一个用于多媒体数据处理的开源框架。交叉编译Qt和GStreamer可以使得我们能够在一个平台上编译出可在另一个平台上运行的应用程序。 要进行交叉编译,首先需要一个交叉编译工具链,该工具链能够在一个平台上生成另一个平台的可执行代码。工具链通常包含了一个特定平台的C/C++编译器、链接器、库以及头文件。 为了交叉编译Qt,我们需要在交叉编译环境中配置好相应的工具链,并下载Qt源码。在交叉编译环境中,我们需要使用qmake工具来生成Makefile,然后使用make工具进行编译。在生成Makefile时,需要指定目标平台的一些参数,例如目标平台的编译器、链接器以及库的路径。 交叉编译GStreamer也类似,我们首先需要在交叉编译环境中配置好相应的工具链,并下载GStreamer源码。然后,我们需要使用autotools工具来生成configure脚本,指定目标平台的一些参数,并使用configure脚本来生成Makefile。最后,使用make工具进行编译即可。 需要注意的是,交叉编译过程中可能会遇到一些依赖问题,例如需要先交叉编译一些依赖库。此外,编译过程中还需要注意一些平台特定的配置和设置,以确保生成的代码可以在目标平台上正确运行。 总之,交叉编译Qt和GStreamer可以使我们能够在一个平台上开发和测试,然后将代码移植到另一个平台上运行,从而提高开发效率和跨平台性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值