Qt的移植

移植Qt时遇到的一些问题:

哈哈,纠结了整整两天的问题得到解决:

首先,先罗列问题,介绍一下问题的背景:

我是在学习Qt中关于QTcpSocket编程的时候,然后突然想到,如果编译成功,我应该怎么移植到ARM板子上呢?所以,就上网偷窥了一下,很多的步骤吧,于是就跟着学习,悲剧的事情啊,在第一步就出现了问题:我在工程文件中用qmake命令生成了makefile文件,但是,用make执行这个Makefile的时候总是出现问题,一大堆的问题:

大概意思就是没有找到库吧,所以所有的头文件都不能通过编译,打开Makefile文件查看,找到Makefile文件中环境变量INCPATH知道make是去哪里找头文件的:

INCPATH=                            -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/share/qt3/include

对,就是这个问题,make是自动到对应的qt3中去找头文件,但是呢,自己的工程却是基于qt4代码的,所以,这样的编译根本是不能通过的。但是,又出现了这样的问题?为什么qmake命令会生成qt3Makefile呢?借助于网络,查阅了很多资料,终于发现了问题的所在:

原来,在我的ubuntu中,有两个qmake文件,一个是基于qt3,一个是基于qt4,但是,如果直接在命令行敲入qmake的话,它默认执行的是qt3中的qmake命令。

终于找到了问题的根源,但是,基于qt4qmake在哪呢?找啊,肯定在Qt4的安装文件中,果不其然,终于让我给找到了:

/opt/qtsdk-2010.04/qt/bin/qmake

这样,问题就基本得到解决了,在shell命令行里执行qmake命令的时候,我们就加上这样的一个路径/opt/qtsdk-2010.04/qt/bin/qmake,这样,我们就指定执行qt4中的qmake,哈哈,编译通过。。。

两天的时间,居然是这样的问题,还好吧, 挺有成就感,但是,时间真是花的太长了。。。

Qt终于移植成功。。。

现在想好好的整理一下,毕竟这一天下来是太累了。。。多亏了网络。。。很多的问题都是从网络上得到解决。。。

首先呢,就是,这个文档中前面的内容,这么多的文件需要qmake一下生成一系列的文件。。。

1,首先,需要做的是,安装Qt库,这里用的安装包是师兄郝东东发给我的。。。在虚拟机下:ubuntu/home/yeh2011/Soft/qtEmbed450-arm

这个文件,以我个人的理解来说,主要是提供一个qmake-arm交叉编译工具和提供一系列的库文件来支持Qt的界面,

然后需要在/root/.bashrc文件中添加下列命令,这些命令的意思就是,添加qmake-arm命令的路径,还有就是增加编译时需要连接的库文件。这里,我对安装包的解压路径为:/usr/local/qtembed450-arm

export PATH=$PATH:/usr/local/qtembed450-arm/bin
export LD_LIBRARY_PATH=$LD_LTBRARY_PATH:/usr/local/qtembed450-arm/lib
export QMAKESPEC=/usr/local/qtembed450-arm/mkspecs/default

当时有这样的疑问?Qt creator中不是包含所有的库吗?为什么还要在虚拟机下安装这些库文件呢?其实,这个不难理解,我们现在开发的Qt界面是脱离了Qt creator这个开发环境的(安装了这个包之后,你就会发现,不需要打开Qt creator软件,只需要敲入命令./findDialog,在虚拟机下就可以弹出你自己开发的界面)。注意,这个findDialog可执行文件,是在qmake之后,然后对Makefile进行make而得到的可执行文件。

2接下来做的就是,在ARM板子上配置Qt界面的环境。其实,做的和在虚拟机上做的差不多,将在虚拟机上解压得到的Embed450-arm文件下的lib文件中的一系列库和front(字体)拷贝到ARM上的某个文件夹下,例如:/usr/local/qtlib/lib。然后将这个路径添加到LD_LIBRARY_PATH中,你只需要修改文件/etc/profile

(这里有一个很尴尬的问题,无论我怎么修改这个文件,都不能添加这个路径,所以,只有将文件拷贝到现在的LD_LIBRARY_PATH指向的路径中,但是,不推荐这样的作法)

3,你现在需要做的只是在虚拟机下对findDialog工程进行交叉编译,此时,会生成.o文件和 我们需要的findDialog文件。你可以用

file findDialog命令来查看这个文件是否支持在arm上运行。(当然是可以的,如果你前面全部配置正确的话)。接下来就是将这个findDialog发送到ARM板上,然后直接运行,就可以了,这是,可以看到ARM上弹出了一个我们已经设计好的对话框。

如图所示:

哈哈,兴奋死我了。。。

4,在将文件下载到ARM板子上以后,出现了很多的问题:

A,./findDialog: error while loading shared libraries: libts-0.0.so.0: cannot open shared object file: No such file or directory

这个问题就是,路径没有添加正确吧, 我试着加了几次,但是都不能解决,只好将libts-0.0.so.0文件拷贝到LD_LIBRARY_PATH支持的路径中了。。。还好,问题得到解决。

B,

[root@FriendlyARM local]# ./findDialog

QWSDisplay::Data::init: Invalid argument

Client can't attach to main ram memory. Aborted

在我用力的摁下Enter键准备欢呼的时候,出乎意料的弹出了这样的错误,很纠结,也看不懂,但是,也是最容易解决的,就是你不能敲入./findDialog命令,你应该在后面加上-qws.

哈哈,就像这样:

[root@FriendlyARM local]# ./findDialog -qws

完美运行。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值