应导师的要求,最近需要做一个嵌入式linux的网络通信应用,万事开头难,搭建环境就花了我好几天。总结下经验,避免走弯路。
首先需要下载三个程序包:
1.qt-x11-opensource-src-4.5.0 x11主要是用来安装qvfb等工具的
2.qt--embedded-linux-opensource-src-4.5.0 嵌入式的qt,需要分别编译出X86和arm两个版本
3.qt-creator 开发工具,很好用
在安装这三个软件前,交叉编译的gcc得先安装好,本人安装的是arm-linux-gcc4.3.3这里就不细说了。
qt-x11安装:
1.解压:tar -xvzf qt-x11-opensource-src-4.5.0.tar.gz.
2../configure -prefix 安装路径
3.make
4.sudo make install
安装完成后需要单独编译qvfb!!!!
qvfb:是嵌入式开发必不可少的工具,qvfb可以让我们在PC上仿真开发板的运行结果。
1.进入qt-x11的源码里 /tools/qvfb/文件夹
2.make
3.将生成的qvfb可执行文件复制到之后编译的x86版本的嵌入式QT 的bin文件夹下
qt-embedded安装:
a.编译X86的qt
1.解压
2. ./configure -prefix /opt/EmbedSky/qt-4.5/__install/x86/ -release -shared -fast -qt-sql-sqlite -plugin-sql-sqlite -qvfb -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
-nomake demos -nomake examples
3.make
4.sudo make install
5.设置环境变量!
$sudo gedit /etc/profile 打开profile文件
在最后一行加入:
export QTDIR=/opt/EmbedSky/qt-4.5/__install/x86
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
export PATH=$PATH:$QTDIR/bin
$source /etc/profile 使立即文件生效 或者重新启动系统也可以
b.编译arm的qt
1.make confclean
2.configure -prefix /opt/EmbedSky/qt-4.5/__install/arm/ -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libjpeg -make libs
-nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb
-no-kbd-qvfb -no-glib -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -I/tslib-1.4/inclued -L/tslib-1.4/lib
3.make
4.sudo make install
安装完毕,helloworld步骤如下:
1.打开qtcreator,在tools中添加qt版本如图:
要想编译能在本地运行的qt程序就选择x86 的qmake
2.新建一个helloworld工程
3.在project中设置工程的build configuration,如图:
4.bulid工程
5.如果直接运行工程的话会提示错误:
QWSSocket::connectToLocalFile could not connect:: No such file or directory
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 &(&表示后台运行)
$cd 工程目录
$./helloworld -qws
这里qws使得程序以窗口服务器的方式启动。窗口服务器对帧缓冲设备进行独占式管理,其他qt程序通过与窗口服务器进行通信的方式间接地使用这些设备。
因此,第一个qt程序必须以qws方式启动,之后的就不用了也不能了,因为已经被独占了。
一些问题:
1.终端输入qvfb时出现:
Cannot open keyboard pipe /tmp/.qtvfb_keyboard-0 ,只要到该文件夹下找到该文件并更改该文件的权限就行:chmod a+rwx XXX
2.编译x11的时候在./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 /home/zhu/Qt/qt-x11-opensource-src-4.5.2/mkspecs/linux-g++
这个问题的解决方法就是安装缺少的三个软件包:libX11-dev libXext-dev libXtst-dev
Ubuntu下使用如下命令:sudo apt-get install libX11-dev libXext-dev libXtst-dev
Fedora下使用如下命令:yum install libX11-devel libXext-devel libXtst-devel
3.Ubuntu终端中输入gmake提示找不到该命令:
gmake其实和make是同一个命令,执行下面命令将gmake和make这两个命令软链接起来:
cd /usr/bin
sudo ln -s make gmake