本來我只是想交叉編譯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的版本,對應的編譯鏈也在這裡設置。
Qt 的詳細介紹:請點這裡
Qt 的下載地址:請點這裡