嵌入式Qt开发环境搭建及移植到开发板

2019-07-13 06:17发布

--------------------------------------------------------------------------------http://blog.csdn.net/xtay1234/article/details/46474767  错误集锦
http://blog.csdn.net/lpp0900320123/article/details/24876159#comments    详细介绍起源
http://blog.php1.cn/article/details/2746                  通俗易懂
http://tieba.baidu.com/p/4138707722                      从头开始http://blog.chinaunix.net/uid-26824818-id-3390151.html   arm-qt的错误解决http://blog.sina.com.cn/s/blog_640531380101dh8m.html    arm-qt的错误解决
--------------------------------------------------------------------------------


整了好多天的Qt移植,今天终于弄出来了。记录一下学习过程,可把我闹心死了。先说说Qt源码包,我刚装Qt的时候非常乱,又有x11的,又有embedded的,还有everywhere的。现在明白了,安装x11,可以开发在pc机下运行的应用程序,并且会生成一些Qt开发工具designer和qvfb。安装embedded ,可以开发在开发板上运行的Qt应用程序。使用everywhere,需要解压三份,使用不同的configure参数可以安装不同平台的Qt,包括前面说的两种。分别为x11,x86,arm。x86的程序可以运行在qvfb里。这就可以不用开发板了。如果是windows装Qt的话,只需要下载个exe文件直接安装就行了。要配置环境变量。(最后再说)再说说windows和linux下的Qt程序。windows 下的Qt和Linux下的Qt可以一样用的,只要在新的系统里再重新使用qmake -project ;qmake;make(windows下是mingw32-make)三个命令编译一下就行了。一定要设置好环境变量啊,否则找不到命令一、.嵌入式Qt程序开发环境的搭建。第一步:PC机安装Qt。在ftp://ftp.qt.nokia.com/qt/source下载Qt的源码包。qt-everywhere-opensource-src-4.8.1.tar.gz 放到/root/Qt目录下。tar -zxvf qt-everywhere-opensource-src-4.8.1.tar.gz 命令解压,将解压后的目录名称改为qtx11.#cd qtx11#./configure#gmake(这一步的时间相当长,四五个小时)#gmake install这是就安装好了,安装在/usr/local/Trolltech/Qt-4.8.1#export PATH=” /usr/local/Trolltech/Qt-4.8.1/bin:$PATH”#qmake -v(如能输出版本号,则说明安装成功)接下来编译qvfb。#cd /root/Qt/qtx11/tools/qvfb#gmake#cp /root/Qt/qtx11/bin/qvfb /bin#qvfb(如果能出现一个虚拟窗口,那么说明编译成功了)第二步:安装Qt for x86#cd /root/Qt/#tar -zxvf qt-everywhere-opensource-src-4.8.1.tar.gz命令解压,将解压后的目录名称改为qtx86.#cd qtx86#./configure-embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb(这个命令可以使应用程序在qvfb里运行,节省开发板)#gmake(很长时间)#gmake install安装目录在/usr/local/Trolltech/QtEmbedded-4.8.1/#export PATH="/usr/local/Trolltech/QtEmbedded-4.8.1/bin:$PATH"#qmake –v (如能输出版本号,则说明安装成功)将上一步中编译好的qvfb复制到/usr/local/Trolltech/QtEmbedded-4.8.1/bin中。第三步:安装交叉编译工具,arm-linux-gcc,我的版本是4.3.2#tar xvzf arm-linux-gcc-4.3.2.tgz -C / (C需要大写,解压后安装在/usr/local/arm/4.3.2/#vi /etc/profile (添加PATH)添加如下内容exportPATH="$PATH:/usr/local/arm/4.3.2/bin"#arm-linux-gcc -v (如果输出版本号说明安装成功)第四步:交叉编译tslib-1.4------------------------------------------------------------

2.3 安装触摸屏校验工具

把tslib-1.4.tar.gz放到一个目录下,比如/opt目录下。接着执行命令如下:       #tar zxvf tslib-1.4.tar.gz 执行命令cd tslib,进入tslib当前目录,接着执行命令如下:       #./autogen.sh 然后接着执行配置命令:       #./configure     --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes 最后执行编译命令和安装命令如下:      1.        make        2.        make install 如果以上步骤没错,则可以在/usr/local/tslib下出现我们需要的库文件,这些库文件我们移植时会用到。编译期间出现的错误:./autogen.sh: 4: autoreconf: not found解决办法:sudo apt-get install autoconf automake libtool-

--------------------------------------------------------------------

下载tslib-1.4.tar.gz放到/root/Qt/目录下#cd /root/Qt/#tar zxvf tslib-1.4.tar.gz#cd tslib#export CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc //设定C编译器#export CXX=/usr/local/arm/4.3.2/bin/arm-linux-g++ //设定C++编译器#./autogen.sh (如果运行有错误则需要安装autoconf、automake、libtool (如yum installautoconf))#echo"ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache //避免检查ac_cv_func_malloc_0_nonnull# ./configure--host=arm-linux --cache-file=arm-linux.cache-prefix=/usr/local/tslib#gmake#gmake install (安装在/usr/local/tslib里面)#vi/usr/local/tslib/etc/ts.conf (修改ts.conf) 最后内容如下:module_raw inputmodule pthres pmin=1module variance delta=30module dejitter delta=100module linear(以下是在对应的开发版上使用,)将上面整个/usr/local/tslib的内容下载到开发版里的对应路径下在(/usr/local/)配置环境变量添加如下内容:exportTSLIB_ROOT=/usr/local/tslibexportTSLIB_TSDEVICE=/dev/input/event0exportTSLIB_CALIBFILE=/etc/pointercalexportTSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.confexport TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/tsexport TSLIB_FBDEVICE=/dev/fb0exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib然后重启开发板,在终端输入./ts_calibrate会出现触摸屏五点校准画面,移植成功。不过我输入命令后没有成功,只是把库函数都挪了过来。sudo apt-get install build-essential
sudo apt-get install libx11-dev libfreetype6-dev libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev libXext-dev
sudo apt-get install  libx11-dev libxext-dev libxtst-devx11  build-essentialsudo apt-get install lzop build-essential u-boot-tools qemu-user-static minicom autoconf m4 debootstrap Libtool liblzo2-2 liblzo2-2 mtd-utils
第五步:安装Qt for arm    ./configure
        -prefix /usr/local/Trolltech/QtEmbedded-4.8.6-arm  -opensource
        -embedded arm
        -xplatform qws/linux-arm-gnueabi-g++          -force-pkg-config
        -host-little-endian
        -depths 16,24,32
        -little-endian
        -no-webkit
        -no-mouse-linuxtp
        -qt-libtiff
        -qt-libmng
        -qt-mouse-tslib
        -qt-mouse-pc
        -qt-gfx-transformed
        -qt-gfx-linuxfb
        -qt-kbd-linuxinput
        -qt-gfx-multiscreen
        -I/usr/local/tslib/include -L/usr/local/tslib/lib
        -D QT_NO_QWS_CURSOR -D QT_QWS_CLIENTBLIT


#cd /root/Qt/#tar zxvf qt-everywhere-opensource-src-4.8.1.tar.gz命令解压,将解压后的目录名称改为qtARM.#cd qtARM#./configure –embedded arm –xplatform qws/linux-arm-g++-qt-mouse-tslib-I/usr/local/tslib/include -L/usr/local/tslib/lib#gmake#gmake install安装目录在/usr/local/Trolltech/QtEmbedded-4.8.1-arm/#export PATH=”/usr/local/Trolltech/QtEmbedded-4.7.1-arm/bin:$PATH”然后输入#qmake –v(如能输出版本号,则说明安装成功)第六步:建立三个文件,用于三个环境变量的设置#vi ~/.setenv-qtx11.sh内容如下export PATH=/usr/local/Trolltech/Qt-4.8.1/bin:$PATHexport QTDIR=/usr/local/Trolltech/Qt-4.8.1/export LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.8.1/lib:$LD_LIBRARY_PATH#vi ~/.setenv-qtx86.sh内容如下export PATH=/usr/local/Trolltech/QtEmbedded-4.8.1-arm/bin:$PATHexport QTEDIR=/usr/local/Trolltech/QtEmbedded-4.8.1-arm/exportLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.1-arm/lib:$LD_LIBRARY_PATH#vi ~/.setenv-qtARM.sh内容如下export PATH=/usr/local/Trolltech/QtEmbedded-4.8.1/bin:$PATHexport QTEDIR=/usr/local/Trolltech/QtEmbedded-4.8.1/exportLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.1/lib:$LD_LIBRARY_PATH接下来是如何使用:假设已经有一个工程目录是hello。(1)想在电脑上运行。#source ~/.setenv-qtx11(使环境变量生效)#cd hello#qmake -project#qmake#make#./可执行文件这样就可以了(2)想在qvfb上运行#source ~/.setenv-qtx86(使环境变量生效)#cd hello#qmake -project#qmake#make#qvfb &(打开qvfb,如果出错的话,就打开x11里的qvfb)#./可执行文件 -qws(3)想在开发板上运行#source ~/.setenv-qtARM(使环境变量生效)#cd hello#qmake -project#qmake#make这时的可执行文件就只能在开发板运行了。下载到开发板(开发板里需要有Qt的库,直接从pc机里拷过来就行了,,将/usr/local/Trolltech/QtEmbedded-4.8.1/lib下的libQtGui.so* 、libQtCore.so*、libQtNetwork.so* 复制到开发板目录的/usr/lib目录下。将交叉编译器lib目录下的libstdc++.so*、libpng.so* 复制到开发板目录/usr/lib目录下。)设置开发板环境变量#exportLD_LIBRARY_PATH=/usr/local/tslib/lib:/usr/lib/:$LD_LIBRARY_PATH这时可以执行编译好的Qt程序了。到程序所在目录下再执行./可执行文件 -qws上述内容为linux下的环境配置。假设windows下安装的是Qt-2009-05,安装目录在D:/Qt/2009.05/在我的电脑->属性->高级->环境变量 ,编辑path变量。添加如下内容;D:Qt2009.05mingwbin;D:Qt2009.05qtbin这样就可以使用qmake -project、qmake、mingw32-make命令了

/*关于编译之后并且在qtcretor中程序不能显示中文的解决方法:*/原因没有编译fontconfig
通过下面方法可以解决qt界面运行后,无法显示中文
a、直接在qt源码目录下configure出错经过网上的一番搜索,发现是缺少fontconfig造成的,于是重新configure:
#./configure -fontconfigb、在fontconfig下面make出错
问题又来了,configure未通过,提示Fontconfig未通过,于是进入/config.tests/x11/fontconfig目录,执行make,发现缺少freetype相关的头文件,首先保证freetype开发库已经安装:
#sudo apt-get install freetype#sudo apt-get install freetype-devel 再次在这里make,还是出错,发现缺少fontconfig开发库,于是
#sudo apt-get install fontconfig-devel再次make,不再出错。错误情况介绍:错误1: ft2build.h: No such file or directory命令sudo apt-get install fontconfig-devel问题解决。错误2: /usr/include/ft2build.h:56: fatal error: freetype/config/ftheader.h: No such file or directory命令 ln -s /usr/include/freetype2/freetype/ /usr/include/freetyp问题解决。c、然后进入Qt源代码目录,再次执行#./configure -fontconfig 批注:其实不能编译通过是缺少两个头文件;fontconfig.h fcfreetype.h 只要把他们复制到 cp fontconfig.h fcfreetype.h /usr/include/fontconfig/ -rfa,就可以了。这两个文件我会上传到的资源里面。

/*************************************************************************************************************************************************/
--------------------------------------------------2016-07-28---------------------------------------------------------------------------------------------------------------------
1.关于不能qtUI程序的中文不能在ARM开发板正常显示的原因。

(1):首先下载文泉字体,这个可以到我的资源下载,下载之后可以,可以解压到arm开发板上的qt安装目录下的lib/fonts下面。
(2):在应用程序中,可以使用
#include
 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
 this->setFont(QFont("wenquanyi", 12, QFont::Bold));


QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
 this->setFont(QFont("wenquanyi", 12, QFont::Bold));
都可以
(3):如果在arm开发板上运行不行。可以把开发板上qt安装目录下的lib/fonts的其他字体库都删除,除了文泉字体。

参考:http://blog.csdn.net/yanzi1225627/article/details/7833711