【新手推荐】基于飞凌OK210开发板ubuntu下的QtCreator的安装、环境搭建与交叉编译的完整攻略及错误解决方法

两周前接触嵌入式,买了OK210开发板,完全新手,本想用wince系统开发,单是usb驱动装不上,各种研究再咨询客服无果,只好放弃,转为linux开发。

谁想linux之路更艰难,命令脚本都不会,只能完全按照手册操作,但是不尽如人意,貌似手册是针对那么对linux开发环境有些许了解的人写的,到了我这种完全小白的人这里,错误百出,束手无策,只能自己慢慢去网上学习了解,整整用了两周时间才把这QT环境弄好,过程不易,仅勉之。

闲话少说,言归正传。

本文参照飞凌嵌入式光盘资料中的《Ubuntu下Qt4.7.1编译环境配置说明.pdf》,对其进行补充和完善。

一、交叉编译环境

在搭建环境之前,我们先来了解下什么是交叉编译。交叉编译器(英语:Cross compiler)是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。交叉编译器在目标系统平台(开发出来的应用程序序所运行的平台)难以或不容易编译时非常有用。本文所讲述的即是pc与arm板之间Linux系统平台的QT界面程序交叉编译器。

Qt Creator 是一款跨平台的集成开发环境,特别针对Qt开发者,是Qt SDK组成的一部分,可运行于Windows, Linux/X11 and Mac OS X等桌面操作系统,允许开发者为多桌面环境及移动设备平台创建应用程序。它包括一个可视化侦错工具和整合的 GUI 版面和外形设计师。这个编辑器的功能包括语法高亮度显示和自动完成。[3] Qt Creator 在 Linux 上,使用 GCC 的 C++ 编译器。在 Windows,默认安装它可以使用 MinGW 或 MSVC。从源代码编译时,也可以使用 cdb。

二、Linux终端命令及脚本语言

在完成编译环境搭建的过程中难免要使用终端和写脚本,了解其使用方法和命令就变得很重要。下面列举可能使用到的命令(中文的“:”代表说明,不是命令中的字符):

ls:显示当前目录文件列表
cd 目录名:改变当前目录(以/开头的目录是以FileSystem作为根目录)
cd~或cd:主目录
cd ..:上级目录
mkdir 目录名:新建目录
rmdir 目录名:删除目录
rm -fr 目录名:无条件删除子目录
cp 源文件 目标文件:复制文件

gedit filename:打开并编辑文本
vi:编辑文本 i:文本模式ESC:命令行模式:q:退出:wq 保存并退出
chmod +x ./filename:为当前用户增加filename文件的执行权限

tar -zxvf filename.tar.gz:解压tar.gz
./filename:运行程序
./configure:配置
make:编译
make install:安装

export:配置环境变量
2>&1:重定向输出

下面进入手册开始搭建编译环境

PC环境:Ubuntu12.04
开发板:OK210
交叉编译器:arm-2009q3(即4.4.1)

三、编译tslib 难度★★

tslib 库,是触摸屏校准时需要的库文件,如对触摸屏的数据进行过滤、去抖动等,QT的库会调用tslib 的库文件。
1.将tslib.tar.gz,拷到Ubuntu/Home下,解压tar xzvf tslib.tar.gz
2.安装autoconf、automake、libtool包

在Ubuntu命令行中分别执行以下三个升级命令,注意#并不是你要输入的命令字符,而是表示命令起始符。
#sudo apt-get install autoconf
#sudo apt-get install automake
#sudo apt-get install libtool
#sudo apt-get install g++

3.进入tslib目录:
cd tslib
设置环境变量,如果arm-linux-g++是根据手册装的arm-2009q3版本,目录就写arm-2009q3
#export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
#export TOOLCHAIN=/usr/local/arm/arm-2009q3
#export TB_CC_PREFIX=arm-linux-
#export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-linux

4.在tslib目录下运行脚本
./autogen.sh
5.用configure生成Makefile.
echo"ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
#./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no PLUGIN_DIR=/usr/local/arm/tslib/plugins -prefix=/usr/local/arm/tslib -host=arm-linux --cache-file=arm-linux.cache 2>&1 |tee conf_log

6.编译make 2>&1 |tee make_log
7.安装make install
8.编译完成后检查主机目录‘/usr/local/arm/’下面是否已经有了‘tslib’
文件夹,如果有的话,请修改etc文件夹下的‘ts.conf’,去掉“# module_rawinput”
中的#号和空格,如下图所示。

如果主机目录‘/usr/local/arm/’下没有‘tslib’文件夹,请将前面编译好的
‘tslib’文件夹拷贝到‘/usr/local/arm’目录下。另外需要把这个‘tslib’文
件夹放到FileSystem目录中(原文是网络文件系统,我一直认为网络文件系统是指nfs,以至于后面的错误困扰了我很久)的‘/usr/local’下面。


四、编译Qt-4.7.1 难度★★★

1.将qt-everywhere-opensource-src-4.7.1.tar.gz拷贝到Ubuntu/Home下,进行解压,tar zxvf qt-everywhere-opensource-src-4.7.1.tar.gz如下图所示:

2.查看build-all脚本里的编译设置(gedit build-all),尤其是环境变量和路径的设置;

原文说确保正确后执行./build-all !!我就是在这被坑了!!我分配了1G内存的虚拟机执行这个过程至少要半个多小时,配置完就会提示错误:找不到makefile,无法编译等等。如果前面tslib的文件夹位置放对了,可能就不会出现这个错误了,我没有去试验。

于是我去寻求解决方法,ljc007帮我分析了build-all这个文件的内容

# 定义变量,并export使之对后面的进程可见
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
export TOOLCHAIN=/usr/local/arm/arm-2009q3
export TB_CC_PREFIX=arm-linux-
export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi

# 删除文件夹
rm -fr qt-everywhere-opensource-src-4.7.1
rm -fr /opt/qt-4.7.1

# 打包压缩
tar xfvz qt-everywhere-opensource-src-4.7.1.tar.gz

# 切换当前目录
cd qt-everywhere-opensource-src-4.7.1

# 执行configure命令,遇到问答的时候选择yes
echo yes | ./configure -opensource -embedded arm -xplatform qws/linux-arm-g++  -no-webkit -qt-libtiff -qt-libmng  -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -prefix /opt/qt-4.7.1   -I /usr/local/tslib/include -L /usr/local/tslib/lib

# 执行 make 命令,标准输出和标准错误显示到屏幕的同时写入文件../qte4.7.1Makelog,然后执行 make install 命令
make 2>&1 | tee ../qte4.7.1Makelog && make install
很明显,是./configure配置没有成功,所以才没有生成makefile,既然是配置问题,那么应该还有其他的错误提示。果然,我看到了这样的错误:

The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/home/qt-everywhere-opensource-src-4.7.1/qt-everywhere-opensource-src-4.7.1/mkspecs/qws/linux-arm-g++.

经过一番搜索,找到这样一篇文章一个顽疾——QT不能包含tslib的头和库文件联合编译的解决方法,于是根据文中的方法我把build-all拆解成两个文件build-1和build-2,如下图所示:

在执行完./build-1后,找到/home/qt-everywhere-opensource-src-4.7.1/qt-everywhere-opensource-src-4.7.1/mkspecs/qws/linux-arm-g++路径下的qmake.conf,如下图修改:


然后先不要执行./build-2,如果直接执行可能还会有错误。

3.编译时可能会提示错误:
Lib/libQtGui.so:undefinedreferenceto‘ts_read_raw’
Lib/libQtGui.so:undefinedreferenceto‘ts_open’
Lib/libQtGui.so:undefinedreferenceto‘ts_fd’
Lib/libQtGui.so:undefinedreferenceto‘ts_config’
Lib/libQtGui.so:undefinedreferenceto‘ts_close’
Lib/libQtGui.so:undefinedreferenceto‘ts_read’

解决办法:
修改/mkspecs/qws/common/linux.conf文件(添加lts参数)
QMAKE_LIBS_THREAD = -lpthread -lts

如下图所示:


这时再执行./build-2,这样节省了大量的重复操作和编译的时间。

五、Qtcreator的安装 难度★

由于这步配置基本没什么错误,有错误也应该是前两节的编译有问题,所以就不再赘述了。


总结一下吧!我在tslib和QT交叉编译时都弄出很多错误来,解决起来真是手足无措,还好我坚持了下来,一点一点的都给解决了,之前很多错误我这里也不容易重现了,所以也没有一一列举出来,如果大家遇到了什么错误,请把详细的错误信息贴出来,有可能我也遇到过,即可以帮你快速解决,也可以完善这篇文章的内容,希望大家都能把自己的资源分享出来,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公西雒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值