QT4安装全过程
【操作系统】:Ubuntu 9.0.4。
【交叉编译器】:armlinux-gcc-3.4.1
【用户】:root
具体步骤与说明:
1.下载源码包
qt-x11-opensource-src-4.5.0.tar.bz2
qt-embedded-linux-opensource-src-4.5.0.tar.bz2
下载地址:ftp://ftp.qtsoftware.com/qt/source/
2.编译及安装qt-x11-opensource-src-4.5.0
qt-x11版本可以产生Qt开发工具,如designer等等,最重要的是可以得到qvfb,嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。qt-embedded版本就是专门用于嵌入式方面的版本。
tar xjvf qt-x11-opensource-src-4.5.0.tar.bz2
cd qt-x11-opensource-src-4.5.0
./configure
make
make install
历经漫长的编译过程,约一个半小时,默认安装在/usr/local/Trolltech/Qt-4.5.0下.编译完成后源程序不要删除,还有用。
3.编译及安装qt-embedded-linux-opensource-src-4.5.0
在用户目录下建立一个src目录,用于存放编译源文件qt-embedded-linux-opensource-src-4.5.0.tar.bz2。将其解压得到qt-embedded-linux-opensource-src-4.5.0,重命名为qt-embedded-linux-opensource-src-4.5.0-x86.再次解压qt-embedded-linux-opensource-src-4.5.0.tar.bz2,并重命令为qt-embedded-linux-opensource-src-4.5.0-arm.为什么有两个复制呢?我们可以从他们的名字上就不难看出前者是适合x架构的,后者适合arm架构的,如果有开发板的话,可以只编译qt-embedded版本成arm架构的就可以了,但是很多时候用qvfb的话,开发会方便很多,所以多编译一个x86架构的也不错。
mkdir ~/src
mvqt-embedded-linux-opensource-src-4.5.0.tar.bz2 ~/src
tar xjvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2
mv qt-embedded-linux-opensource-src-4.5.0qt-embedded-linux-opensource-src-4.5.0-x86
tar xjvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2
mv qt-embedded-linux-opensource-src-4.5.0 qt-embedded-linux-opensource-src-4.5.0-arm
cd qt-embedded-linux-opensource-src-4.5.0-x86
./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-x86 -embedded x86 -qvfb
make
make install
-------OK!qt-embedded-x86被安装在/usr/local/Trolltech/QtEmbedded-4.5.0-x86下.
cd qt-embedded-linux-opensource-src-4.5.0-arm
./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-arm -embedded arm
make
make install
-------OK!qt-embedded-arm被安装在/usr/local/Trolltech/QtEmbedded-4.5.0-arm下.
4.至此我们已经安装好了qt-x11版,即在PC机上运行的QT,qt-embedded-x86版(x86体系的嵌入式板子上运行的QT)和qt-embedded-arm(arm板子上运行的QT).下一步:设置环境变量
(1)qt-x11:
vi setenv.sh
添加如下内容:
PATH=/usr/local/Trolltech/Qt-4.5.0/bin:$PATH
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.0/lib:$LD_LIBRARY_PATH
保存退出.移到/usr/local/Trolltech/Qt-4.5.0中。
(2)qt-embedded-x86:
vi setenv.sh
添加如下内容:
QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-x86PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin:$PATHLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-x86/lib:$LD_LIBRARY_PATH
保存退出.移到/usr/local/Trolltech/QtEmbedded-4.5.0-x86中。
(3)qt-embedded-arm:
vi setenv.sh
添加如下内容:
QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-armPATH=/usr/local/Trolltech/QtEmbedded-4.5.0-arm/bin:$PATHLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-arm/lib:$LD_LIBRARY_PATH
保存退出.移到/usr/local/Trolltech/QtEmbedded-4.5.0-arm中。
我们在运行的时候分别运行对应的脚本即可,比如我们要用qt-x11:
cd /usr/local/Trolltech/Qt-4.5.0
source setenv.sh
然后就可以用qmake designer等工具了.
5.做到这一步还有qvfb没有编译,到qt-x11-opensource-src-4.5.0中重新编译qvfb即可
cd qt-x11-opensource-src-4.5.0
cd /tools/qvfb
make --会在qt-x11-opensource-src-4.5.0/bin下生成qvfb,我们将它copy至/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin下
cp ../..bin/qvfb /usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin
6.做一个测试
cd /usr/local/Trolltech/QtEmbedded-4.5.0-x86
source setenv.sh
cd /usr/local/Trolltech/QtEmbedded-4.5.0-x86/demos/books
qvfb -width 640 -height 480 &
./books -qws
效果截图:
还来做一个小测试:
vim hello.cpp
#include #include int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}
保存退出。
qmake -project
qmake
make
./hello
效果如下:
胜利!
假设我们为你要用QtEmbedded-4.5.0-x86进行编译的时候,方法如下:
cd /usr/local/Trolltech/QtEmbedded-4.5.0-x86/
启动脚本,修改相应的环境变量
source setenv.sh
切换到源代码所在的目录
cd /home/my_Qt
cd test
编译,执行
qmake -projectqmakemake
在执行之前必须输入以下命令,如果直接./test的话,将有如下出错提示:
QWSSocket::connectToLocalFile could not connect:: 没有该文件或目录QWSSocket::connectToLocalFile could not connect:: 没有该文件或目录QWSSocket::connectToLocalFile could not connect:: 没有该文件或目录QWSSocket::connectToLocalFile could not connect:: 没有该文件或目录QWSSocket::connectToLocalFile could not connect:: 没有该文件或目录QWSSocket::connectToLocalFile could not connect:: 没有该文件或目录No Qt for Embedded Linux server appears to be running.If you want to run this program as a server,add the "-qws" command-line option.
qvfb&./test -qws
效果如下:
但奇怪的是当我在另外一个终端里面用同样的方法时,提示出错,如下: