shell Python 开源 apache linux命令 linux php java nginx Windows 程序员 Android wordpress mysql HTML5 微软 Firefox Ubuntu centos google

交叉编译qt-everywhere-opensource-src-4.7.3,Qte编译

环境:

  • 编译链:arm-Linux-gcc version 4.4.1
  • busybox版本:busybox-1.15.1
  • tslib版本:tslib-1.4
  • QTE版本:qt-everywhere-opensource-src-4.7.3
  • Linux发行版:Fedora Core release 6 (Zod)

qt-everywhere-opensource-src-4.7.3是Qt提供的一套Embedded下的类库,方便在Embedded的开发平台使用Qt,下面讲的就是如何交叉编译qt-everywhere.1:下载qt-everywhere-opensource-src-4.7.3源码,下载的话直接谷歌百度,下载之后然后解压,本人在root目录下解压

[root@localhost ~]# tar zxf qt-everywhere-opensource-src-4.7.3.tar.gz

2:进入目录,执行配置:

[root@localhost ~]# ./configure -opensource -embedded arm -xplatform
qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng
-qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -I
/usr/local/tslib/include -L /usr/local/tslib/lib -prefix=/usr/local/Trolltech/QtEmbedded-4.7.3-arm

其中参数列表中的:

-I
/usr/local/tslib/include -L /usr/local/tslib/lib -prefix=/usr/local/Trolltech/QtEmbedded-4.7.3-arm

-I /usr/local/tslib/include  #指的是编译要用到的tslib头文件,tslib指的是本地Linux系统编译之后的tslib;

-L /usr/local/tslib/lib #指的是编译要用到的tslib的库文件

-prefix=/usr/local/Trolltech/QtEmbedded-4.7.3-arm #指的是编译之后Qte的目录

3:编译完之后,会在/usr/local目录下产生一个叫Trolltech/QtEmbedded-4.7.3-arm的文件夹,里面就是嵌入式Qt的各种lib,编译工具以及一些demos等等,这里面我们往往最需要的就是bin文件下的编译工具链以及lib库里面的Qte库,我们可以把Trolltech/QtEmbedded-4.7.3-arm/下面的这个lib目录拷贝到开发板的根文件系统的某个地方,比如放到/opt下面,我的是:/opt/QtEmbedded-4.7.3-arm/lib,当然,为了演示Qte的一些例子(QtEmbedded-4.7.3-arm/下面目录有个demos目录),我们可以把整个QtEmbedded-4.7.3-arm拷贝到开发板的根文件系统某个地方,比如我的是:/opt/QtEmbedded-4.7.3-arm

4:配置Qte.在第三步最后,我们已经得到了Qte的lib库,我们在嵌入式开发中使用的Qt程序之所以能够运行,靠的就是Qte的lib库支持,所以,我们要把Qte的库加到Linux系统的类库路径变量上去,那就是:LD_LIBRARY_PATH,在这里我们讲下LD_LIBRARY_PATH作用.

LD_LIBRARY_PATH:Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径.(该路径在默认路径之前查找)
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中.

我们要做的就是把Qte的lib加到/etc/profile这个文件里面,以及再加上Qte的一些其他设置,我们打开/etc/profile,加入如下配置:

#加入Qte的lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/QtEmbedded-4.7.3-arm/lib
#Qpe路径,Qpe是个仿真环境,我们要给Qpe仿真的目录,也就是我们的Qte路径,注意Qte跟Qpe是截然不同的
export set QPEDIR=/opt/QtEmbedded-4.7.3-arm/
#Qte字体库路径
export QT_QWS_FONTDIR=/opt/QtEmbedded-4.7.3-arm/lib/fonts

如果想让QT/E在ARM端支持USB鼠标,也可以在这个文件里配置,这些都取决与自己的系统以及硬件设备,有些系统可能没有这些设备,那就暂时不用添加
export QWS_MOUSE_PROTO=MouseMan:/dev/input/mouse0export QWS_MOUSE_PROTO=”TPanel:/dev/touchpanel MouseMan:/dev/mice”

加好之后,可以看到我们移植tslib以及Qte之后,所修改的/etc/profile文件合并起来之后是这样的:

export TSLIB_ROOT=/opt/tslib
export TSLIB_TSDEVICE=/dev/event1
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none
export LD_LIBRARY_PATH=/opt/tslib/lib:/opt/QtEmbedded-4.7.3-arm/lib
export set QPEDIR=/opt/QtEmbedded-4.7.3-arm/
export QWS_MOUSE_PROTO=Tslib:/dev/event1
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
export QWS_SIZE=800x600
export QTDIR=/opt/QtEmbedded-4.7.3-arm/
export QT_QWS_FONTDIR=/opt/QtEmbedded-4.7.3-arm/lib/fonts

5:运行Qt程序

假如在第三步骤把整个/opt/QtEmbedded-4.7.3-arm目录拷贝过来的,那么我们可以在目录QtEmbedded-4.7.3-arm/demos/mainwindow中执行自带的一个窗口程序:
./mainwindow -qws

必须加上-qws命令,qws是运行嵌入式程序在嵌入式QT版本中,程序需要服务器或自己作为服务器程序

执行这条命令便可以看到一个窗口出来,那么恭喜,到此Qte已经成功移植了.

假如在第三步没有把整个/opt/QtEmbedded-4.7.3-arm目录拷贝过来,而是想运行自己的程序的话,那么我们便可以在Linux系统上,用编译好的QtEmbedded-4.7.3-arm目录里面的bin文件夹里面的工具,他们是:lrelease moc qmake rcc uic,我们常用的就是qmake了,通过qmake去编译自己的项目,把编译之后生成的可执行程序放到开发板的根文件系统,比如编译之后程序是testqte,那么在开发板便可执行:./testqte -qws

这样就可以把我们自己的程序跑起来了.到此,Qte移植结束.

移植过程可能出现的一些错误:

1:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决办法:把交叉编译工具链下的libstdc++.so.6拷贝到Qte的lib目录文件夹下,注意,有的交叉编译链中库libstdc++.so.6可能是个软连接,所以,我们一定要把真正的文件拷过去,千万不能只拷贝一个连接过去了,还是会报错的.比如我遇到错误,这么解决:

cp libstdc++.so libstdc++.so.6 libstdc++.so.6.0.12 ~/minifs/opt/QtEmbedded-4.7.3-arm/lib/

2:error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

解决办法:如上,找lib拷贝即可

延伸阅读

  • 抱歉,暂无相关内容!

评论