当前位置: 技术问答>linux和unix
qt embedded 2.37 自己写的hello 交叉编译出错,大家帮帮忙,谢谢
来源: 互联网 发布时间:2016-09-06
本文导语: 先说一下我的环境: 操作系统 :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...
先说一下我的环境:
操作系统 :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平台的程序。下面是我的操作过程
-、[/b]仿真环境下编译Hello World[/b],顺利通过没有什么问题
[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[/b],问题就出在这个阶段
[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
[backcolor=#cccccc]下面是tmake生成的关键部分,都是按照手册配置的:[/backcolor]
[backcolor=#cccccc]CC = arm-linux-gcc[/backcolor]
[backcolor=#cccccc]CXX = arm-linux-g++[/backcolor]
[backcolor=#cccccc]CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG[/backcolor]
[backcolor=#cccccc]CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG[/backcolor]
[backcolor=#cccccc]INCPATH = -I$(QTDIR)/include[/backcolor]
[backcolor=#cccccc]LINK = arm-linux-g++[/backcolor]
[backcolor=#cccccc]LFLAGS = [/backcolor]
[backcolor=#cccccc]LIBS = $(SUBLIBS) -L/usr/local/arm/3.3.2/lib -L$(QTDIR)/lib -lm -lqte[/backcolor]
[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,[b][color=#000000]但是和[/color][/b]arm-linux-g++不兼容,难道我用GCC3.2.3交叉编译生成的Qt/Embedded 和 cross-3.3.2不兼容,是这样吗,真的头大了
请高手明示,在线等待
操作系统 :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平台的程序。下面是我的操作过程
-、[/b]仿真环境下编译Hello World[/b],顺利通过没有什么问题
[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[/b],问题就出在这个阶段
[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
[backcolor=#cccccc]下面是tmake生成的关键部分,都是按照手册配置的:[/backcolor]
[backcolor=#cccccc]CC = arm-linux-gcc[/backcolor]
[backcolor=#cccccc]CXX = arm-linux-g++[/backcolor]
[backcolor=#cccccc]CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG[/backcolor]
[backcolor=#cccccc]CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG[/backcolor]
[backcolor=#cccccc]INCPATH = -I$(QTDIR)/include[/backcolor]
[backcolor=#cccccc]LINK = arm-linux-g++[/backcolor]
[backcolor=#cccccc]LFLAGS = [/backcolor]
[backcolor=#cccccc]LIBS = $(SUBLIBS) -L/usr/local/arm/3.3.2/lib -L$(QTDIR)/lib -lm -lqte[/backcolor]
[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,[b][color=#000000]但是和[/color][/b]arm-linux-g++不兼容,难道我用GCC3.2.3交叉编译生成的Qt/Embedded 和 cross-3.3.2不兼容,是这样吗,真的头大了
请高手明示,在线等待
|
QTE库也要交叉编译,并且环境变量要指向交叉编译的库。
可以用命令来看一下你的库是否正确:
#cd $QTEDIR/lib
#file libqte.so.2.3.7
看看这个库文件的格式是什么,是X86的,还是ARM的
可以用命令来看一下你的库是否正确:
#cd $QTEDIR/lib
#file libqte.so.2.3.7
看看这个库文件的格式是什么,是X86的,还是ARM的