原创文章欢迎转载,请保留出处。
若有任何疑问建议,欢迎回复。
邮箱:[email protected]
由于在Linux搭建嵌入式QT开发环境是相对比较费时间的事,我经过了几天的挂机编译出错和改正才成功,故留下笔记,让大家少走弯路。本人使用的友善之臂的Tiny210开发板进行测试。
QT有很多版本,但是不是互相兼容的,所以我只能选择一个版本配置开发环境,最新的QT版本是5.4.0,采用的是QPA(QT平台抽象)技术,由于比较新,资料丰富度不如4版本,开发比较棘手,所以本人采用相对成熟的QT4开发,本人使用的QT版本是4.8.5社区开源版。
由于QT4开始所有的版本都集合在一个源码包,所以只需要下载一个源码包,通过不同的配置就能生成不同版本的QT,这里我需要编译的QT分别是X11(QVFB基于X11)、X86、ARM版。
另外关于QT和Qtopia和QTE的区别,最老的是Qtopia,开发到2.2版本停止开发,是QT以前专门为嵌入式设备开发的一个QT分支,后来又改名QT Extend也是为嵌入式设备开发的一个分支,后来QT废除了这个分支,直接由QT编译生成的QT Embedded来为嵌入式设备提供解决方案,我现在使用的就是这个版本,但是我使用的开源社区版,功能有限,比如没有虚拟键盘支持,这使得有些设备还使用旧的版本。
不同的环境可能出现不同的问题,以下是我成功编译的环境。
在终端的超级用户权限下输入命令
apt-get install g++ glib-2.0 gtk+-2.0 xorg-dev
其中g++为编译qt必须,glib和gtk+为编译X11版时配置选项-gtkstyle需要,xorg-dev为编译qvfb必须。
以上这些库都是我经过编译后发现缺少总结出来的。
首先需要编译的是X11版的qt,这个版本的qt主要用于桌面开发,而且需要编译qvfb的话,就必须先编译X11版。
首先到官网下载qt-4.8.5源码qt-everywhere-opensource-src-4.8.5.tar.gz,这里我用开发板自带的DVD里面的,由于qt4后把所有源码统一到一个压缩包,只需要下载一个源码包,通过配置就可以编译出不同的qt库。
首先先要用tar命令解压一份源码(注意别删qt源码压缩包,后面还要用),然后在超级用户下通过配置命令配置源码。
echo yes | ./configure –opensource –prefix /opt/qt-4.8.5-x11-gtk –gtkstyle –fontconfig –make tools
配置后编译和安装。(大概要1小时左右,可以先喝杯咖啡睡个觉。)
make –j4 &&make install
这里我用-gtkstyle让qt内嵌gtk主题,编译和安装后不要删除源码目录。
没有提示错误自带退出即为编译成功,后面我再进行测试。
这个主要用来模拟开发板的运行环境,在PC测试效果。
首先在超级用户下进入到编译X11的qt源码目录里,进入qvfb目录cd tools/qvfb/编译qvfb,输入make
等待编译完成(大概1分钟),然后make install
就会安装到X11的安装目录下,这里是/opt/qt-4.8.5-x11-gtk/bin/qvfb,这里你可以添加环境变量方便调用qvfb,但我这里不配置了。
在PC上用framebuffer模拟还需要编译出相应平台的qt库才能用qvfb模拟,所以编译embedded-x86版本用于生成qvfb能执行的二进制程序。这次编译可以和编译X11版同时编译,节省时间。
同样,先解压一份新的源码(不要在编译了X11的源代码上编译),
配置选项
echo yes | ./configure -opensource -prefix /opt/qt-4.8.5-embedded-x86 -embedded x86 -xplatform qws/linux-generic-g++ -qt-libtiff -qt-libmng -qvfb
然后执行编译和安装(编译时间大概需要一小时左右,和编译X11版本同步进行)
make -j4 && make install
没有提示错误自带退出即为编译成功,后面我再进行测试。
编译这个版本首先是为了PC开发程序编译成板上用的程序需要,另外移植qt到开发板所需要的库也是由这个编译出来的。(这里要用到arm-linux工具链,注意检查环境变量)
另外我用到板上的字体DoridSansFallback.tff,编译安装后,带上库打包放到板上。这里是PC配置,暂不讨论,后面移植到开发板再说明。
同样,先解压一份新的源码,配置选项
echo yes | ./configure -opensource -prefix /opt/qt-4.8.5-embedded-arm -embedded arm -xplatform qws/linux-arm-g++ -webkit -qt-gfx-transformed -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -no-neon
然后执行编译和安装,编译时间又要一小时左右。
make -j4 && make install
这里最后生成后可以生成用于PC编译和移植到arm开发板上所需要的库,把移植到arm开发板的库复制到开发板的目录下,注意这个目录要和PC上安装的目录一样,否则编译出的程序无法识别到库。
这里移植QT比较简单,只需要把ARM版的QT所带的库复制到开发板上(这里目录要和PC的目录一致,不然提示找不到库),然后配置环境变量LD_LIBRARY_PATH加入库的路径即可。注意可以添加/bin/setqt4env脚本和/bin/qt4启动脚本,如果开发板运行字体过大或者过小,可以通过QWS_SIZE和QWS_DISPLAY来调整,这里我设置成开发板对应的800x480和240:0的DPI可以比较完美地显示Dorid Sans的默认字体,需要中文字体要另外复制到lib下的fonts下,例如文泉驿qpf字体,通过启动参数-font wenquanyi设置。
字体过大也可以调用micro字体,unifont字体等。
这个部分只需要在官网下载qt-creator-opensource-linux-x86-3.3.0.run运行安装就可以了。注意这里的只是IDE不是SDK,不包含其他的编译器,或者例子。
这里需要配置三个配置,分别是X11,QVFB模拟ARM和ARM目标板的,首先要添加三个Qt版本qt-4.8.5-x11-gtk / qt-4.8.5-embedded-x86 / qt-4.8.5- embedded-arm(之前编译的目录,在opt目录下) 另外添加arm-linux-gcc编译器。我建立三个套件,X11-4.85,Qvfb-4.8.5,ARM-4.8.5。
这里我用一个日历程序测试。我打开Qt creator,新建一个项目,选择Qt Widgets Application选上3个构建套件,基础类选择Qwidget。
模拟开发板运行:在项目设置里设置下QVFB的运行选项,添加运行预环境选择qvfb(/opt/qt-4.8.5-x11-gtk/bin/qvfb),参数写-width 800 –height 480 &
而程序执行参数写上-qws -font wenquanyi
(显示中文需要在网上下载文泉驿qpf字体解压到/opt/qt-4.8.5-embedded-x86/lib/fonts)运行效果如下:
开发板:最后通过SD卡复制到板上运行效果如下(要显示中文的话要有对应的字体,例如unifont或者上面复制的DoridSansFallback字体。如果需要触摸的话还要执行环境配置,这里不展示,另外要设置屏幕旋转要修改/bin/setqt4env文件中的改为旋转90的export QWS_DISPLAY=Transformed:Rot90:1
,这里不能直接执行export,因为直接执行会被.
setqt4env覆盖环境变量。)
通过漫长的编译时间终于配置成功QT开发环境,可惜apt-get命令只能安装PC编译套件,如果只需要PC编译套件可以选择apt-get安装或者到QT官网下载SDK。
另外,这里编译的QT不包含数据库功能,下次我再展示如何使用Sqlite3+QT实现嵌入式数据库程序开发。