本来我只是想交叉编译qt embedded的库,一开始选的是4.7.0的版本,编译器用的4.5.1,后来改成4.4.1,都不行。走了N多网站,不知在哪里看到有人建议不要用4.7.0的版本,于是去换了个4.7.3的版本,交叉编译器也改成4.4.3版本的。交叉编译器建议用这个版本,友善之臂的。其实解压之后去目录下一看就知道其实它也是用ct-ng配置出来的。记得在configure之前先修改mkspec/qws/linux-arm-g++/qmake.conf文件,网上有教程,不废话。长久的等待后,交叉编译成功了,也成功安装了。后来又发现在用该库写的qt程序,放到ARM上运行的时候,总会有个warning,类似这样:
Application asked to unregister timer 0×17000006 which is not registered in this thread.
于是,又逛了n多个网站,终于在某个旮旯里得知这个bug在4.8版本的库被修复了。最终去官网下了最新的4.8.5版本的库(貌似qt4就这个最新了)。修改一下qmake.conf,编译,安装,十分顺利。交叉编译后的qt程序在ARM板上运行的时候,果然不会有这个warnings了。
好了,题外话说多了。移植qt embedded的库后,又接着编译linux desktop的qt库。毕竟用qt embedded的库编译出来的qt程序没法在笔记本里跑。先在笔记本里跑,确定无误了,再交叉编译到ARM上去跑,感觉保险一点。跟交叉编译用到的库是一样的,还是在解压出来的目录下,因为之前交叉编译过,先清除配置文件。
$make distclean
$make clean
$make confclean
再重新配置,编译,安装。
打开~/.bashrc添加相应的路径至环境变量。
然后在终端里输入designer,出现了一堆warnings和errors。类似这样:
Gtk-CRITICAL **: IA__gtk_widget_style_get: assertion `GTK_IS_WIDGET (widget)' failed
解决方法如下:
$sudo apt-get install qt4-qtconfig
然后,终端里输入命令:qtconfig-qt4 //注意,这个命令反过来的。不再叫qt4-qtconfig了。
然后在打开的窗口里,外观-->GUI风格-->选择GUI风格,这里不要选default(因为default就是GTK+),也不要选GTK+,随便你喜欢选个别的,然后文件-->保存-->退出。
此时再在终端里输入designer或qtdemo就不会再提示GTK+错误了。
但是assistant还是打不开,我在终端里输入assistant时,提示的是:无法加载Qsqlite驱动。
一开始以为是少装了一些sql之类的东西,于是用apt-get 把sqlite开头的装了个遍还是解决不了。
后来,查看了qt库的编译选项(在解压目录下,./configure --help查看),发现有几个选项是跟sql有关的。
于是在编译选项里加上-sql-sqlite,再次编译安装后还是打不开assistant。
怒啊,没办法,有强迫症的,这一整套东西就assistant打不开,偏偏这东西这么重要,一定要搞定它啊!!!
在网上看到有人提到plugins/目录下的sqldrivers,但是我发现我的plugins目录下没有这个东西。于是重新编译了一次,这次干脆也不静态编译了,就采用默认的动态编译,然后sql的选项改成-plugins-sql-sqlite。confiugre配置如下:
./configure -prefix /home/thomas/software/QtLinux-4.8.5-desktop -debug-and-release -platform linux-g++ -no-qt3support -no-webkit -no-phonon -fast -plugins-sql-sqlite -stl -opengl -opensource
好了,这下没问题了,assistant可成功打开了。
需要注意的是,4.8.5版本似乎不再将qt creator和qt库集成在一起了。所以qt库采用编译安装的方式,qt creator可在官网上下载单独安装(这个有安装界面),或者在ubuntu下的软件中心里直接装也行。ubuntu软件中心的qt creator好像是2.7版本的,英文界面的。我个人用的是2.5.2的版本,中文界面,觉得很不错,至少感觉比2.7版本的好。可以在qt creator中工具-->选项-->构建和运行-->qt版本中,设置qt embedded和qt linux的版本,对应的编译链也在这里设置。