解析 QT Embedded 交叉编译 ARM 部分
创始人
2024-08-01 22:31:10
0

QT Embedded  交叉编译 ARM 部分是本文将要介绍的内容,先来看本内容。

  1. tmake-1.11.tar.gz ,  
  2. qt-embede-2.3.7.tar.gz ,  
  3.  qt-x11-2.3.2.tar.gz,  
  4.  qt-free-1.7.tar.gz e2fsprogs.1.35.tar.gz,  
  5.  jpegsrc.v6b.tar.gz 

同样我在/home/mainframe下建立目录qt_arm作为交叉编译目录

好!我们开始分析脚本:

#cd /home/mainframe/qt_arm (拷贝上述所有压缩包到该目录包括e2fsprogs-1.35.tar.gz和jpegsrc.v6b.tar.gz两个压缩包)

当前目录为/home/mainframe/qt_arm

#tar xzvf +各个压缩包,解压到/home/mainframe/qt_arm,记得要解压e2...和jpegsrc....两个包哦

  1. #mv tmake-11 tmake  
  2. #mv qt-2.3.7.tar.gz qt  
  3. #mv qt-2.3.2.tar.gz qt-x11  
  4. #mv qt-free-1.7.tar.gz qtopia 

其实 moc,uic,designer 等等文件可以copy 编译PC机时产生的。没问题的,没必要重新再编译一次。

  1. # cd .. 

下面开始配置环境变量,很多脚本都这样写

  1. #export QTDIR=$PWD/qt  
  2. #export QTEDIR=$QTDIR  
  3. #export QPEDIR=$PWD/qtopia  
  4. #export TMAKEDIR=$PWD/tmake  
  5. #export TMAKEPATH=$TMAKEDIR/llib/qws/linux-arm-g++(常规g++编译器)这点就和PC上的不同了,qws目录中有很多包括手机,PDA和ARM之类的g++编译器。  
  6. #export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH  
  7. #export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  

还是原来的说法,写一个环境变量脚本,在需要的时候才启用该脚本。!良好的习惯。

  1. #cd ..  
  2. #cd qt  
  3. #make clean 

再次强调以下步骤是必要的,否则会出现cannot fine -lqte问题

  1. #cp $QPEDIR/src/qt/qconfig-qpe.h src/tools  
  2. #echo yes|./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 16,24,32 

(所有的configure文件都要按照自己的实际需要配置,别人的不一定适合你。)

  1. #make -C src 

上面没有问题的话那么我们开始准备编译qtopia目录内的东西啦!

  1. #cd .. 

如果你这样做:

  1. cd qtopia/src  
  2. ./configure -platform linux-arm-g++  
  3. make  

那么会出现这样的错误:

cannot find -lqtopia以及uuid.h 找不到的问题

  1. #tar --xzvf e2fsprogs.1.35.tar.gz  
  2. #cd e2fsprogs-1.35   
  3. #./configure -host=arm-linux -with-cc=arm-linux-gcc -with-linker=arm-linux-ld -enable-eld-shlibs  
  4. -prefix=/usr/local/arm/2.95.3/arm-linux 

注意:这里prefix选项很重要,必须指定交叉编译工具2.95.3中的arm-linux,不要改成别的目录或者不指定prefix选项,

  1. #make  
  2. #make install lib/uuid 安装到该目录  
  3. #tar xzf e2fsprogs-1.35.tar.gz  
  4. #cd e2fsprogs-1.35  
  5. #./configure -host=arm-linux -with-cc=arm-linux-gcc -with-linker=arm-linux-ld -enable-elf-shlibs -prefix=/usr/local/arm/2.95.3/arm-linux  
  6. #make  
  7. #make install lib/uuid/ 

将e2fsprogs-1.35/lib/目录下uuid的文件夹复制到/home/mainframe/qt_arm/qtopia/include下
将e2fsprogs-1.35/lib/中的libuuid.a libuuid.so libuuid..so.1 libuuid.so.1.2复制到/home/mainframe/qtopia/lib下,有必要也copy一份到 /usr/local/arm/2.95.3/arm-linux/lib下面

好!问题解决了。

如果你这样做:

  1. cd qtopia/src  
  2. ./configure -platform linux-arm-g++  
  3. make  

那么会出现以下错误:

  1. ./usr/local/arm/2.95.3/arm-linux/bin/ld: cannot find -ljpeg 

这是因为在qt目录内编译是configure文件默认配置为支持jpeg,然后在最后编译的时候找不到相关的链接库.这个时候我们需要压缩包jpegsrc.v6b.tar.gz,来解决这个问题

下载jpegsrc.v6b.tar.gz到qtarm目录并解压,进入目录jpeg-6b:

  1. ./configure --enable-shared 

make (得到libtools程序)

  1. ./configure --enable-shared 

修改生成的Makefile文件:

  1. prefix = /home/mainframe/qt (qte的路径)  
  2. CC =/usr/local/arm/2.95.3/bin/arm-linux-gcc  
  3. AR =/usr/local/arm/2.95.3/bin/arm-linux-ar rc  
  4. AR2=/usr/local/arm/2.95.3/bin/arm-linux-ranlib  
  5. cp jconfig.doc jconfig.h  
  6. mkdir -p /home/mainframe/qt/man/man1  
  7. make 

生成的libjpeg.so在.libs下,将libjpeg.so拷贝到/usr/local/arm/2.95.3/bin/arm-linux/lib

将/jpeg-6b/.libs目录下的libjpeg.la,libjpeg.so ,libjpeg.so.62 以及libjpeg.so.62.0.0拷贝到目录

  1. /usr/local/arm/2.95.3/arm-linux/lib (没有bin) 

好!这个问题解决了,再来:

  1. cd qtopia/src  
  2. ./configure -platform linux-arm-g++  
  3. make 

小结:解析 QT Embedded  交叉编译 ARM 部分的内容就介绍到这,目前我也只做到了这一步,其他的还在探索中。欢迎大家交流。当中的很多文字借鉴了别人的,哈!见谅。最后希望本文能读你有所帮助!

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...