• 5675阅读
  • 8回复

qt embedded 2.37 自己写的hello 交叉编译出错,大家帮帮忙,谢谢 [复制链接]

上一主题 下一主题
离线stillman
 
只看楼主 倒序阅读 楼主  发表于: 2009-08-15

先说一下我的环境:
操作系统 :Fefora 8 (自带gcc 版本是4.12)
开发板:优龙FS2410

◆ tmake 1.11 或更高版本; (生成 Qt/Embedded 应用工程的 Makefile 文件)
◆ Qt/Embedded 2.3.7 (Qt/Embedded 安装包)
◆ Qt 2.3.2 for X11; (Qt 的 X11 版的安装包, 它将产生 x11 开发环境所需要的两个工具)
◆ GCC 3.2.3
◆ 交叉编译器 cross-3.3.2

下面是我的真实经历,也是我为什么选择GCC 3.2.3 的原因(有点长啊,我从自己博客复制过来的):

    拿到板子后,兴奋不已,心想终于拿到你了,这下可以真枪实弹地实验一把了,可谁又料到噩梦是一个接着一个。一有时间我就按照FS2410使用手册,一步一步实验,前面的还好,都是一些理论知识,有一些可以暂时不理。

等到编译Linux内核的时候,第一个噩梦就开始了,我先说一下编译环境,操作系统是 Fedora 8,系统自带GCC 版本是4.1.2,在编译内核error一大筐,对一个刚接触linux的新手来说,真是一个很大的打击,因为我就想按照手册一步一步踏踏实实走下来,前面的问题不解决我不想看后面的东西,怎么办呢,身边也没有高手,虽然有错误提示,咱也看不懂啊,接下来就是半年的郁闷,真是没有心思再去碰它了。

也就是上周吧,带着沉重的心情再次打开上次出现问题的那一页,上网查查吧,说不定会有收获,果不其然,相同的问题还不少,有可以是编译器GCC版本太高的原因,我就想难道GCC不向前兼容,那就试试吧,我就下了一个GCC 3.4.3 ,装了一下,还真的编译通过了,那个高兴劲儿就别提了,真的,对于我来说,这就是解决了一个大问题。

我就高歌前进,终于看到QT开发这一章了,说实话,这才是我最终的目标。QT开发这第一步就是部署开发环境,安装TMAKE的时候还顺利,等到安装 Qt/Embedded 2.3.7,这第二个噩梦就开始了,还是错误一大筐,有了上次的经验我就直接上网查,网上说什么的都有,很有可能是编译器版本的问题,难道GCC 3.4.3还高,再说了,安装一个编译器也要半个多小时呢,唉,那有什么办法呢,试试看,我就装了一个GCC 3.3.1,果然通过了,就是GCC的原因,我就趁着招呼劲儿编译安装 Qt/X11 2.3.2,你猜怎么了,对了,又出问题了,心想学一点东西它怎么就那么难呢,不会又是GCC的问题吧,GOOGLE一通,判断有可能是GCC的问题,那就再安装一个低版本的吧,装个gcc-3.2.3,编译顺利通过,妈呀,终于通过了。

这就告一段落吧,通过上面的问题总结如下。
1、Linux的发行版本比较混乱,这点跟WINDOWS相比有点差距。
2、手册上的例子的环境都比较旧,再加上GCC版本不兼容的问题,最好装个比较低的开发环境。

现在转入正题,说一下我遇到的问题:
我自己做了一个Hello World  程序,很简单,程序应该没有什么问题,我主要是想先在仿真开发环境测试下,
然后再交叉编译成arm平台的程序。下面是我的操作过程

-、仿真环境下编译Hello World,顺利通过没有什么问题
[root@wcs test]# gcc -v
gcc version 3.2.3

[root@wcs test]# make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fno-default-inline -DNO_DEBUG -I/usr/local/qt/x86-qt/qt/include -o hello.o hello.cpp
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fno-default-inline -DNO_DEBUG -I/usr/local/qt/x86-qt/qt/include -o main.o main.cpp
/usr/local/qt/x86-qt/qt/bin/moc hello.h -o moc_hello.cpp
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fno-default-inline -DNO_DEBUG -I/usr/local/qt/x86-qt/qt/include -o moc_hello.o moc_hello.cpp
gcc  -o hello hello.o main.o moc_hello.o  -L/usr/local/qt/x86-qt/qt/lib -lm -lqte
[root@wcs test]# qvfb &
[1] 5729
[root@wcs test]# Using display 0

[root@wcs test]# ./hello -qws
Connected to VFB server: 240 x 320 x 32
[root@wcs test]# cd ../../../arm-qt/

二、交叉编译Hello World,问题就出在这个阶段
[root@wcs test]# echo $TMAKEPATH
/usr/local/qt/arm-qt/tmake/lib/qws/linux-arm-g++
[root@wcs test]# echo $QTDIR
/usr/local/qt/arm-qt/qt
[root@wcs test]# tmake -o Makefile hello.pro

下面是tmake生成的关键部分,都是按照手册配置的:
CC    =    arm-linux-gcc
CXX    =    arm-linux-g++
CFLAGS    =    -pipe -Wall -W -O2 -DNO_DEBUG
CXXFLAGS=    -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG
INCPATH    =    -I$(QTDIR)/include
LINK    =    arm-linux-g++
LFLAGS    =   
LIBS    =    $(SUBLIBS) -L/usr/local/arm/3.3.2/lib -L$(QTDIR)/lib -lm -lqte

[root@wcs test]# make
arm-linux-g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/usr/local/qt/arm-qt/qt/include -o hello.o hello.cpp
arm-linux-g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/usr/local/qt/arm-qt/qt/include -o main.o main.cpp
/usr/local/qt/arm-qt/qt/bin/moc hello.h -o moc_hello.cpp
arm-linux-g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/usr/local/qt/arm-qt/qt/include -o moc_hello.o moc_hello.cpp
arm-linux-g++  -o hello hello.o main.o moc_hello.o  -L/usr/local/arm/3.3.2/lib -L/usr/local/qt/arm-qt/qt/lib -lm -lqte
/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: skipping incompatible /usr/local/qt/arm-qt/qt/lib/libqte.so when searching for -lqte
/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: cannot find -lqte
collect2: ld returned 1 exit status
make: *** [hello] 错误 1

上面的错误说明已经找到了libqte.so,但是和arm-linux-g++不兼容,难道我用GCC3.2.3交叉编译生成的Qt/Embedded 和 cross-3.3.2不兼容,是这样吗,真的头大了

请高手明示,在线等待
离线superyongzhe

只看该作者 1楼 发表于: 2009-08-15
把makefile里面的CC=arm-linux-gcc改为CC=arm-linux-g++试一下,还有就是确认makefile里面含有正确的库路径。
有付出才有回报!
离线stillman
只看该作者 2楼 发表于: 2009-08-15
我试过了,还是同样的问题,
[root@wcs test]# echo $LD_LIBRARY_PATH
/usr/local/qt/arm-qt/qt/lib:/usr/local/qt/arm-qt/qt-x11/lib:/usr/local/qt/x86-qt/qt/lib:/usr/local/qt/x86-qt/qt-x11/lib:/usr/local/gcc-3.2.3/lib:
[root@wcs test]# echo $TMAKEPATH
/usr/local/qt/arm-qt/tmake/lib/qws/linux-arm-g++
路径看起来都正确啊,如上
离线superyongzhe

只看该作者 3楼 发表于: 2009-08-15
还有就是你看看那个路径下是否真的有libqte.so,把Makfile里的
LIBS    =    $(SUBLIBS) -L/usr/local/arm/3.3.2/lib -L$(QTDIR)/lib -lm -lqte

改为
LIBS    =    $(SUBLIBS) -L/usr/local/arm/3.3.2/lib -L$(QTDIR)/lib -lm -lqt
试试,可能没有lqte,你自习看看库的路径里是否真的有那个库。
有付出才有回报!
离线stillman
只看该作者 4楼 发表于: 2009-08-15
首先非常感谢你关注,在/usr/local/qt/arm-qt/qt/lib有啊
离线superyongzhe

只看该作者 5楼 发表于: 2009-08-15
还有一种办法就是把这个库的路径加在/etc/ld.so.conf文件中,然后执行ldconfig命令,这样也许可以解决问题。可以看下你那个库目录里的文件吗?
有付出才有回报!
离线stillman
只看该作者 6楼 发表于: 2009-08-15
我感觉不是这个问题,那个库已经找到了。主要是这句
/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: skipping incompatible /usr/local/qt/arm-qt/qt/lib/libqte.so when searching for -lqte
离线stillman
只看该作者 7楼 发表于: 2009-08-16
已经找到问题了,用file 命令查看了一下,妈啊,还真是有问题
[root@wcs lib]# file libqte.so.2.3.7
libqte.so.2.3.7: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

怎么会这样呢,我记得当前编译/usr/local/qt/arm-qt/qt的时候已经已经设置–xplatform
./configure –xplatform linux-arm-g++ -shared –debug (接下行)
-qconfig local -qvfb -depths 4,8,16,32
反正问题找到了,那就重新交叉编译qt-embedded-2.3.7吧,问题顺利解决。
离线zhangzuoyi
只看该作者 8楼 发表于: 2009-08-19
我也遇到了类似的问题,我的环境是Centos5.3 , gcc4.1.2 ,arm-linux-gcc3.3.2 想搭建qt/embedded环境老是不成功,想按照楼主的办法安装低版本的GCC,可是安装完GCC3.3.6后
[halu@localhost gcc-build]$ gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)

应该是没有安装成功,请教下楼主是咋样安装GCC的,没有受到原系统高版本GCC的影响吗?
快速回复
限100 字节
 
上一个 下一个