微信秒下款的口子:QT/E 交叉编译 (ARM 部分)

来源:百度文库 编辑:中财网 时间:2024/05/04 15:05:51
QT/E 交叉编译 (ARM 部分)

工具:tmake-1.11.tar.gz ,qt-embede-2.3.7.tar.gz , qt-x11-2.3.2.tar.gz,qt-free-1.7.tar.gz e2fsprogs.1.35.tar.gz,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....两个包哦
#mv tmake-11 tmake
#mv qt-2.3.7.tar.gz qt
#mv qt-2.3.2.tar.gz qt-x11
#mv qt-free-1.7.tar.gz qtopia
其实 moc,uic,designer 等等文件可以copy 编译PC机时产生的。没问题的,没必要重新再编译一次。
# cd ..
下面开始配置环境变量,很多脚本都这样写
#export QTDIR=$PWD/qt
#export QTEDIR=$QTDIR
#export QPEDIR=$PWD/qtopia
#export TMAKEDIR=$PWD/tmake
#export TMAKEPATH=$TMAKEDIR/llib/qws/linux-arm-g++(常规g++编译器)这点就和PC上的不同了,qws目录中有很多包括手机,PDA和ARM之类的g++编译器。
#export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
还是原来的说法,写一个环境变量脚本,在需要的时候才启用该脚本。!良好的习惯。。
#cd ..
#cd qt
#make clean
再次强调以下步骤是必要的,否则会出现cannot fine -lqte问题
#cp $QPEDIR/src/qt/qconfig-qpe.h src/tools
#echo yes|./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 16,24,32

(所有的configure文件都要按照自己的实际需要配置,别人的不一定适合你。)
#make -C src
上面没有问题的话那么我们开始准备编译qtopia目录内的东西啦!
#cd ..
如果你这样做:
cd qtopia/src
./configure -platform linux-arm-g++
make
那么会出现这样的错误:
cannot find -lqtopia以及uuid.h 找不到的问题
#tar --xzvf e2fsprogs.1.35.tar.gz
#cd e2fsprogs-1.35
#./configure -host=arm-linux -with-cc=arm-linux-gcc -with-linker=arm-linux-ld -enable-eld-shlibs
-prefix=/usr/local/arm/2.95.3/arm-linux
注意:这里prefix选项很重要,必须指定交叉编译工具2.95.3中的arm-linux,不要改成别的目录或者不指定prefix选项,
#make
#make install lib/uuid 安装到该目录

#tar xzf e2fsprogs-1.35.tar.gz
#cd e2fsprogs-1.35
#./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
#make
#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下面
好!问题解决了。
如果你这样做:
cd qtopia/src
./configure -platform linux-arm-g++
make
那么会出现以下错误:
./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:
./configure --enable-shared
make (得到libtools程序)
./configure --enable-shared
修改生成的Makefile文件:
prefix = /home/mainframe/qt (qte的路径)
CC =/usr/local/arm/2.95.3/bin/arm-linux-gcc
AR =/usr/local/arm/2.95.3/bin/arm-linux-ar rc
AR2=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
cp jconfig.doc jconfig.h
mkdir -p /home/mainframe/qt/man/man1
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拷贝到目录
/usr/local/arm/2.95.3/arm-linux/lib (没有bin)
好!这个问题解决了,再来:
cd qtopia/src
./configure -platform linux-arm-g++
make

目前我也只做到了这一步,其他的还在探索中。欢迎大家交流。当中的很多文字借鉴了别人的,哈!见谅。