Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3356824
  • 博文数量: 258
  • 博客积分: 9440
  • 博客等级: 少将
  • 技术积分: 6998
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-03 10:28
个人简介

-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu

文章分类

全部博文(258)

文章存档

2016年(1)

2015年(4)

2014年(16)

2013年(22)

2012年(41)

2011年(59)

2010年(40)

2009年(75)

分类: LINUX

2010-03-11 21:15:55

折腾了很多天,终于将qt的交叉编译环境建好了.记录之,方便后用。同时希望给初学者一点提示,少走我的弯路.
环境:Ubuntu 9.04
交叉编译器:arm-linux-gcc 3.4.1
qt包: qtopia-core-opensource-src-4.3.3.tar.gz  自己到官网下载。

以root身份进入终端.
第一步:建立好arm-linux-gcc 3.4.1。
第二步:将qtopia-core-opensource-src-4.3.3.tar.gz拷贝到你喜欢的目录下,并进入此目录。

tar zxvf qtopia-core-opensource-src-4.3.3.tar.gz

cd qtopia-core-opensource-src-4.3.3/mkspecs/qws/Linux-arm-g++

vi qmake.conf

由于没有设置相应环境变量,故用绝对路径,arm-Linux- 前面加上路径/usr/local/arm/3.4.1/bin/.(也可以直接在/etc/bash.bashrc修改,加上PATH=$PATH:/usr/local/arm/3.3.2/bin来设置环境变量)

第三步: 配置QT/E

cd ../../../ 回到源代码根目录

 在文件qtopia-core-opensource-src-4.3.3/src/gui/embedded/qmouselinuxtp_qws.h中加入

#define QT_QWS_IPAQ

#define QT_QWS_IPAQ_RAW

    在文件qmouselinuxtp_qws.cpp里把/dev/h3600_ts替换为自己板子的设备文件,我的板子的设备为/dev/h3600_tsraw,正好与qmouselinuxtp_qws.cpp中使用的设备中一致,就不用改了。

第四步: 回到源代码根目录

./configure -embedded arm -xplatform qws/linux-arm-g++ -depths 8,16,32 -no-qt3support

然后一路选择yes默认即可

最后中断会有提示,我们make,make完了之后make install即可(这是一个漫长的编译过程)

注意:

步骤2中如果只定义了#define QT_QWS_IPAQ则使用的是/dev/h3600_ts,如果两个都定义了则使用的是/dev/h3600_tsraw

 配置完成后运行make进行编译,编译过程中可能会出现无法找到头文件zlib.h问题,则按①,②所述修改相应文件即可。

编译完成后运行 make install进行安装, qtopia-core-opensource-src-4.3.3将被安装到/usr/local/Trolltech/QtopiaCore-4.3.3-arm

在开发板上设置环境变量

在/home/[yourname]目录下建立env.sh脚本文件,添加内容如下:

export  QTDIR=/usr/local/Trolltech/QtopiaCore-4.3.3-arm

export  QPEDIR=/usr/local/Trolltech/QtopiaCore-4.3.3-arm

export  QWS_KEYBOARD="USB:/dev/input/event1"

export  QWS_MOUSE_PROTO="LinuxTP:/dev/h3600_tsraw"

export  PATH=$QPEDIR/bin:$PATH

export  LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib

保存退出之后,我们编译qt的时候现确认下环境变量:在你的目录下使用命令:source env.sh ,然后qmake -project;qmake;make即可

ok!建立一个qt应用程序hello.cpp下载到目标板试试:

#include

#include

#include

#include

#include

int main(int argc,char *argv[])

{

QApplication app(argc,argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

QWidget *pWidget=new QWidget;

QLabel label(pWidget);

QFont font;

font.setPointSize(12);

font.setFamily("wenquanyi");

app.setFont( font );

label.setText(QObject::tr("您好"));

pWidget->show();

return app.exec();

}


说明:我们在PC机上也安装有QT4,为了区分它们,我们可以将qte里面的可执行文件名改名,eg:
cd /usr/local/Trolltech/QtopiaCore-4.3.3-arm/bin:进入此目录,
mv moc Moc 
mv qmake Qmake 
mv rcc Rcc 
mv uic Uic
我们以后编译arm的qt应用程序时用Qmake.编译PC机的qt应用程序时用qmake
 
 
注意事项:
我用ubuntu9.04,使用,但qtopia-core-4.3.3,我在前面./configure, make两步 都是成功的,在sudo make install的时候,就出现了以下错误
arm-linux-ranlib "/usr/local/Trolltech/QtopiaCore-4.3.3-arm/examples/tools/plugandpaint/plugins/libpnp_basictools.a"
/bin/sh: arm-linux-ranlib: not found
make[4]: *** [install_target] 错误 127
make[4]:正在离开目录 `/home/mrchy/qtopia-core-opensource-src-4.3.3/examples/tools/plugandpaintplugins/basictools'
make[3]: *** [sub-basictools-install_subtargets] 错误 2
make[3]:正在离开目录 `/home/mrchy/qtopia-core-opensource-src-4.3.3/examples/tools/plugandpaintplugins'
make[2]: *** [sub-plugandpaintplugins-install_subtargets-ordered] 错误 2
make[2]:正在离开目录 `/home/mrchy/qtopia-core-opensource-src-4.3.3/examples/tools'
make[1]: *** [sub-tools-install_subtargets] 错误 2
make[1]:正在离开目录 `/home/mrchy/qtopia-core-opensource-src-4.3.3/examples'
make: *** [sub-examples-install_subtargets-ordered] 错误 2
 
解决方法:先切换到root用户:sudo su
         再进行:make install
解释:
在终端检查,发现arm-linux-ranlib可以在系统的PATH中找到,因为我已经把/usr/local/arm/3.4.1/bin添加到了PATH中。
    那为什么还提示说找不到arm-linux-ranlib呢?
原因如下:
    1.我添加arm交叉编译器目录到PATH中是放在~/.bash_profile里的,这是用户的配置文件,我的用户为wmm。
    2.执行make install时,加了sudo前缀,变成了root的工作环境和root的权限。
    根据以上两点,make install是在root下做的,而arm-linux-ranlib在wmm用户的工作环境中才能找到。所以产生了这里的错误。
那我既要取得root权限,又要具有当前用户wmm的工作环境,改怎办呢?
解决如下:
    执行make install之前,先用下su命令取得root权限。然后再执行make install。
su 和 sudo 的区别:
    1.共同点:都是root用户的权限;
    2.不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。
阅读(4678) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~