一、Qt嵌入式开发平台的建立 概述:Qt嵌入式开发平台包括: 1、Qt-X11开发平台:(即为我们平时开发Qt应用程序时使用的系统平台)。 2、Qt/Embedded-4.5.2开发平台(即framebuffer):该平台可以让Qt程序在pc机上模拟在嵌入式平台的运行情况,一般在Qt/Embedded上模拟运行成功后才,进行交叉编译。 3、Qt/Embedded-4.5.2-arm交叉编译平台:在此平台下编译通过的Qt程序就可以移植到arm板上运行了。 step1: 建立Pc开发平台(x11、redhat9的桌面就属于X11): 下载Qt4.5.2pc开发包qt-x11-opensource-src-4.5.2.tar.gz (下载地址:ftp://ftp.trolltech.com/qt/source/) #tar xzvf qt-x11-opensource-src-4.5.2.tar.gz #cd qt-x11-opensource-src-4.5.2 #./configure -qvfb #make #cd tools/qvfb #make #cd ../.. #make install 安装好后,系统默认安装在/usr/local/Trolltech/Qt-4.5.2目录下 检查环境变量: #which qmake 复制文件 进入/usr/local/Trolltech会看到一个Qt-4.5.2的目录,将 /home/tools/qt-x11-opensource-src-4.5.2/bin/目录下的qvfb相关文件拷贝到/usr /local/Trolltech/Qt-4.5.2/bin目录下 #cp qvfb* /usr/local/Trolltech/Qt-4.5.2/bin 注意:在configure时有可能会报如下的错误提示: Basic XLib functionality test failed! You might need to modify the include and library search paths by editing QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /usr/include/qt/qt-x11-opensource-src-4.5.2/mkspecs/linux-g++. 有两个原因会造成这个错误(具体的错误信息可以进config.test/x11/xlib 执行make命令) 1、没有安装libxext和libX11-dev 2、安装了但路径与QT设置的不一样,这时你需要根据提示修改mkspecs/common/linux.conf中的宏定义 step2: 建立qt-embedded -4.5.2编译平台(此时编译器仍然用的是默认的gcc) #tar xzvf qt-embedded-linux-opensource-src-4.5.2.tar.gz #cd qt-embedded-linux-opensource-src-4.5.2 ./configure -embedded x86 -qvfb -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb #make install 安装完成后usr目录多了一个文件夹/usr/local/Trolltech/QtEmbedded-4.5.2就表示安装成功了 step3: qt-embedded -4.5.2-arm交叉编译平台的建立(此时不是用系统默认的gcc来编译了) #tar xzvf qt-embedded-linux-opensource-src-4.5.2.tar.gz #cd qt-embedded-linux-opensource-src-4.5.2 #./configure -embedded arm //注意几个选项,必须加上 -embedded arm选项 #make install 安装完成后usr目录多了一个文件夹/usr/local/Trolltech/QtEmbedded-4.5.2-arm就表示安装成功了 注意:如果你的arm平台用的不是arm-linux-g++的编译器,则需修改mkspecs/qws/linux-arm-g++/qmake.conf step4: 设置环境变量:环境变量的设法总的说来有4种(export、profile、.bashrc、.bashrc_profile)具体看自己情况来定 #vi /root/.bash_profile //在环境变量的最前面加上一句: PATH=/usr/local/Trolltech/QtEmbedded-4.5.2 /bin:$PATH #source /root/.bash-Profile //使环境变量生效 好了平台已经搭建好了,可以用他来编译Qt程序了 注意:如果要编成arm平台的程序,需将环境变量改为 PATH=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin:$PATH 设置虚拟屏幕 #export DISPLAY=:0.0 # qvfb & //运行qvfb step5: 用qt-embedded -4.5.2来进行编译,在x86上运行程序 以hello例子,其源程序如下: #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Qt!"); label->show(); return app.exec(); } 将上面内容保存为hello.cpp #qmake -v //检查自己的qt环境变量是否正确,如果不正确的话,就返回第4步 #cd myqtprogram //进入自己写的qt程序 #qmake -project //生成.pro工程文件 #qmake //生成Makefile #make //生成执行程序 #./myqtprogram -qws //运行程序 如果要生成arm平台的程序,可通过修改环境变量,使 用qt-embedded -4.5.2-arm来进行交叉编译,使其生成arm平台的程序 step6: 如果要在arm板上运行QT程序,在进行交叉编译后,查看自己写的Qt程序需要用到哪些库文件资源。 #ldd myqtprogram 如果不支持ldd命令,可以使用arm-linux-readelf -a -myqtprogram | grep Shared //Shared首字母大写; step7: 拷贝库文件: 根据上一步提示把Qt程序要用到的资源文件拷到自己制作的根文件系统中,以下是按本人写的Qt程序所需要的库写的 将程序移植到arm板运行 拷贝库文件到自己制作的root系统中(注意:拷贝时一定要看看大小,千万不要拷到连接文件(相当于快捷方式)了) #cd usr/lib #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libpng* ./ //把图形库考过去,否则图片显示不了,强烈建议用png、bmp格式的图片,用其他格式的图片的话,否则你还要自己做连接库 #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libQtCore.so libQtGui.so ./ //这2个库不用说一定要考的 #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libQtNetwork.so ./ //和网络相关的库 #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libstdc++.so ./ #cd ../ //以下是在根文件系统qt-root/usr/local/下制增加一个Trolltech/ QtEmbedded -4.5.2-arm/lib/fonts路径目录并添加相应的字体文件,否则在arm板上会出错显示不了字 #mkdir local/Trolletch #mkdir local/Trolletch/QtEmbedded-4.5.2-arm #mkdir local/Trolletch/QtEmbedded-4.5.2-arm /lib #cp /usr/local/Trolltech/QtEmbedded-4.5.2-arm /lib/fonts local/Trolletch/QtEmbedded -4.5.2-arm/lib //注意不要拷错路径了 step8: 把程序下载到arm板运行 注意:如果arm板上液晶显示的设备不是/dev/fb0,则需链接过去, 否则运行时会提示找不到fb0 #./myqtprogram -qws //-qws表示以服务器模式运行 ok能在板子上跑起来了 常见问题解决方法: 1、 运行QT程序报如下错误 Qt for Embedded Linux data directory is not owned by user 520h 解决方法是将/tmp目录下的qtembedded-0目录删除。造成该错误是因为用户没有该目录的权限。 |