天嵌 ARM开发社区

 找回密码
 注册
查看: 3372|回复: 8

按照天嵌Qt24小时版本,Qt4.5生成了hello_cn不能再开发板运行?问题详述如下。

[复制链接]
limuscle 发表于 2013-3-3 17:20:44 | 显示全部楼层 |阅读模式
本帖最后由 limuscle 于 2013-3-4 11:37 编辑

1、编译ARM版本的Qt4.5
./arm_qt4.5_build。以下是脚本的内容,prefix改为/opt/qt-embedded-4.5.3


  1. cd $PWD/qt-embedded-linux-opensource-src-4.5.3

  2. echo yes | ./configure -prefix /opt/qt-embedded-4.5.3 -release -shared -fast -pch -no-qt3support -q
  3. t-sql-sqlite -qt-libtiff -qt-gif -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl
  4. -nomake examples -nomake demos -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -qt-sql-sql
  5. ite -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-
  6. linuxfb -no-gfx-qvfb -qt-kbd-usb -no-kbd-qvfb -no-mouse-qvfb -qt-mouse-tslib -I/tslib/include -L/t
  7. slib/lib

  8. echo "Finished config Qt-embedded-4.5.3"
  9. echo
复制代码
cd $PWD/qt-embedded-linux-opensource-src-4.5.3

make && make install


编译成功并且是成功安装的。

2、建立源码:main.cpp、hello_cn.cpp 和hello_cn.h 这个代码就不贴了。保存在/work/GUI/opt/qt-x11-opensource-src-4.5.3/examples/Limuscle/hello_cn文件夹中
3、在hello_cn文件夹中建立项目脚本。由于是用于arm的。所以
embedded_project.sh:
     $QMAKE -project
     $QMAKE
4、导入arm的环境变量:
qt4.5.3_embedded_setenv.sh:保存在hello_cn目录下
export QPEDIR=/opt/qt-embedded-4.5.3/bin
export QTOPIA_DEPOT_PATH=/opt/qt-embedded-4.5.3/bin
export QTDIR=/opt/qt-embedded-4.5.3/bin
export DQTDIR=/opt/qt-embedded-4.5.3/bin
export QMAKE=/opt/qt-embedded-4.5.3/bin/qmake
export UIC=/opt/qt-embedded-4.5.3/bin/uic
export TMAKEDIR=/opt/qt-embedded-4.5.3/bin
export TMAKEPATH=/opt/qt-embedded-4.5.3/mkspecs/qws/linux-arm-g++
export PATH=$QPEDIR/bin:$QTDIR/bin:$DQTDIR/bin:$TMAKEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$QTDIR/lib:$DQTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MANPATH LD_LIBRARY_PATH
echo "  set qt-embedded-4.5.3 env successful  "
echo

以上脚本本来是按照 天嵌提供的setARM_env来的,但是发现原来的TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++这个是没有的,于是修改了,改为export TMAKEPATH=/opt/qt-embedded-4.5.3/mkspecs/qws/linux-arm-g++。这里是不是我搞错了。

5、开始执行。
source qt4.5.3_embedded_setenv.sh
./embedded_project
到这一步可以得到Makefile文件的。
打开Makefile,
  1. CC = gcc
  2. CXX = g++
  3. DEFINES = -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -
  4. DQT_SHARED
  5. CFLAGS = -pipe -g -O2 -Wall -W -D_REENTRANT $(DEFINES)
  6. CXXFLAGS = -pipe -g -O2 -Wall -W -D_REENTRANT $(DEFINES)
  7. INCPATH = -I../../../mkspecs/linux-g++ -I. -I../../../include/QtCore -I../../../include/QtGui
  8. -I../../../include -I. -I.moc/release-shared
  9. LINK = g++
  10. LFLAGS = -Wl,-O1 -Wl,-rpath,/work/GUI/opt/qt-x11-4.5.3/lib -Wl,-rpath,/work/GUI/opt/qt-x11-4.
  11. 5.3/lib
复制代码

以上是一部分,可以看到CC,CXX,LINK是用的是x86上的编译器,不是arm-linux-gcc,arm-linux-g++,
如果使用这个Makefile文件,编译出来的执行文件肯定不可用啦。

执行file hello_cn
  1. hello_cn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
复制代码

可以看到是80386机器类型上执行的文件。

问题:为什么不是生成arm-linux-gcc类型的Makefile,究竟哪一步我错了。

还有一个说明一下:就是那个qt4.5.3编译arm版本生成安装/opt/qt-embedded-4.5.3/应该是成功的。因为之前我试第一次hello_cn时是成功生成arm下的执行文件,并且可以在开发板上运行的。




ww110052181 发表于 2013-3-4 07:09:36 | 显示全部楼层
亚瑟王 发表于 2013-3-4 09:55:55 | 显示全部楼层
亲,应该用arm版本的qmake工具,而不是用PC自带的qmake工具来生成Makefile文件。
 楼主| limuscle 发表于 2013-3-4 10:25:49 | 显示全部楼层
本帖最后由 limuscle 于 2013-3-4 10:33 编辑

回复楼上:
其实是使用arm版本的qmake的。
因为之前导入了环境变量了,且在embedded_project.sh中是使用$QMAKE的。
  1. limuscle@ubuntu:/work/GUI/opt/qt-embedded-linux-opensource-src-4.5.3/examples/Limuscle/hello_cn$ source qt4.5.3_embedded_setenv.sh
  2. set qt-embedded-4.5.3 env successful

  3. limuscle@ubuntu:/work/GUI/opt/qt-embedded-linux-opensource-src-4.5.3/examples/Limuscle/hello_cn$ echo $QMAKE
  4. /opt/qt-embedded-4.5.3/bin/qmake
  5. limuscle@ubuntu:/work/GUI/opt/qt-embedded-linux-opensource-src-4.5.3/examples/Limuscle/hello_cn$
复制代码
以上可以看出是使用了arm版本的qmake的。

我的x86编译的版本目录/work/GUI/opt/qt-x11-opensource-src-4.5.3
arm版本qt4.5.3编译目录:/work/GUI/opt/qt-embedded-linux-opensource-src-4.5.3/
昨天的都是在x86版本目录下进行的。

昨天后,我将工程从x86复制到arm版本目录中。同样执行同样的操作,此时就可以生成arm版本的makefile,生成执行文件可以在开发板中使用。

于是怀疑是不是由于工程放置的路径问题。
想测试可不可以再arm版本编译目录下生成x86的执行文件。
将qt4.5.3_x11_setenv.sh,x11_project.sh 复制到arm编译目录:/work/GUI/opt/qt-embedded-linux-opensource-src-4.5.3/

  1. #!/bin/sh
  2. #qt4.5.3_x11_setenv.sh
  3. export QPEDIR=/work/GUI/opt/qt-x11-4.5.3/bin
  4. export QTOPIA_DEPOT_PATH=/work/GUI/opt/qt-x11-4.5.3/bin
  5. export QTDIR=/work/GUI/opt/qt-x11-4.5.3/bin
  6. export DQTDIR=/work/GUI/opt/qt-x11-4.5.3/bin
  7. export QMAKE=$QTDIR/qmake
  8. export UIC=$QTDIR/uic
  9. export TMAKEDIR=$QTDIR/bin
  10. export TMAKEPATH=/work/GUI/opt/qt-x11-4.5.3/mkspecs/qws/linux-arm-g++
  11. export PATH=$QPEDIR/bin:$QTDIR/bin:$DQTDIR/bin:$TMAKEDIR/bin:$PATH
  12. export LD_LIBRARY_PATH=$QPEDIR/lib:$QTDIR/lib:$DQTDIR/lib:$LD_LIBRARY_PATH
  13. export PATH QTDIR MANPATH LD_LIBRARY_PATH
  14. echo " set qt4.5.3-x11 env successful "
  15. echo
复制代码

同样也复制x86的项目脚本:x11_project.sh
  1. #!/bin/sh

  2. #set the qmake env varible,need comment at here ,and it execture at command line
  3. #/work/GUI/opt/qt4.5.3_x11_setenv.sh
  4. #use the system qmake
  5. qmake -project
  6. qmake
复制代码

接着就执行:在arm版本编译目录:/work/GUI/opt/qt-embedded-linux-opensource-src-4.5.3/examples/Limuscle
source qt4.5.3_x11_setenv.sh ; ./x11_project.sh

此时生成了Makefile使用的是arm-linux-gcc 交叉编译器,而不是gcc这个x86编译器。

所以我总结就是编译x86版本的执行文件要放置在x86编译的目录:/work/GUI/opt/qt-x11-opensource-src-4.5.3下。
编译arm版本的执行文件要把工程放置在arm编译的目录:/work/GUI/opt/qt-embedded-linux-opensource-src-4.5.3/下。

这只是目前个人的理解。不知对与错。请指正??

可能有点啰嗦了。




亚瑟王 发表于 2013-3-4 10:32:59 | 显示全部楼层
limuscle 发表于 2013-3-4 10:25
回复楼上:
其实是使用arm版本的qmake的。
因为之前导入了环境变量了,且在embedded_project.sh中是使用$ ...

第一个脚本你是想用于arm吗?他的路径都应该用arm的qt的路径才对。
 楼主| limuscle 发表于 2013-3-4 10:37:46 | 显示全部楼层
是啊,现在我也是这样认为了。想用于arm的,要把工程放置在arm的qt路径上。想用于x86的,要把工程放置在x86的qt路径上。
此前错误认为只要改变当前的环境变量,就可以在x86的qt上生成用于arm的执行文件。
亚瑟王 发表于 2013-3-4 10:38:40 | 显示全部楼层
limuscle 发表于 2013-3-4 10:37
是啊,现在我也是这样认为了。想用于arm的,要把工程放置在arm的qt路径上。想用于x86的,要把工程放置在x86 ...

是的,要区分的。
 楼主| limuscle 发表于 2013-3-4 10:49:32 | 显示全部楼层
谢谢了。
亚瑟王 发表于 2013-3-4 11:12:34 | 显示全部楼层
limuscle 发表于 2013-3-4 10:49
谢谢了。

亲,问题解决了,请修改帖子类型为“已解决”(请参考:http://www.armbbs.net/forum.php?mod=viewthread&tid=15200
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-24 14:30 , Processed in 1.078125 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表