环境: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/Ecd ../../../ 回到源代码根目录
① 在文件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 <QtGui/QApplication>
#include <QtGui/QWidget>
#include <QtGui/QLabel>
#include <QtCore/QTextCodec>
#include <QFont>
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
/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
原因如下:
1.我添加arm交叉编译器目录到PATH中是放在~/.bash_profile里的,这是用户的配置文件,我的用户为wmm。
2.执行make install时,加了sudo前缀,变成了root的工作环境和root的权限。
根据以上两点,make install是在root下做的,而arm-linux-ranlib在wmm用户的工作环境中才能找到。所以产生了这里的错误。
解决如下:
执行make install之前,先用下su命令取得root权限。然后再执行make install。
1.共同点:都是root用户的权限;
2.不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。