1. 程式人生 > >虛擬機器中在Ubuntu14.04下搭建QT交叉編譯環境--2014/8/14

虛擬機器中在Ubuntu14.04下搭建QT交叉編譯環境--2014/8/14

一、Ubuntu安裝及配置

在windows上下載VMware10.0.2 並安裝,在網上找永久金鑰啟用。開啟後是中文版
在Ubuntu官網上下載ubuntu-14.04.1-desktop-i386

開啟虛擬機器,並建立新的虛擬機器,記憶體1g,硬碟20g 。虛擬磁碟檔案分多個儲存。開啟後略卡。

虛擬機器網路模式選橋接,由於網路設定暫時沒弄,簡單連校園網。
在軟體更新裡嘗試找到附加驅動裡的顯示卡驅動,看是否能讓系統不太卡。發現沒有附加驅動。
在軟體更新裡新增軟體源,並設定伺服器為中國伺服器。

在系統設定的語言支援裡更新語言並新增 chinese(簡),並應用到整個系統,重啟後ubuntu變為漢語。

設定登入介面新增root登入:

開啟終端
輸入sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
在彈出的編輯框裡輸入:greeter-show-manual-login=true 儲存關閉。
再在中端中輸入:sudo passwd root
輸入你想要的密碼,關機重啟在多出的登入框裡輸入root 還有你的密碼就好了!


二、安裝QTcreater

上QT官網下載qt-linux-opensource-5.2.1-x86-offline.run
通過mac轉到虛擬機器裡後,剪下到/home/zl

在終端執行:./qt-linux-opensource-5.2.1-x86-offline.run

出現圖形介面不斷next安裝在使用者目錄下,source組建暫時不裝

finish後開啟QT creater的例程執行,出現:”Qt Creator 需要設定一個編譯器來構建。在構建套件選項裡設定一個編譯器。”。看來是編譯器的問題。

然後安裝g++編譯器sudo apt-get install g++


安裝完編譯器後,重新開啟Qt Creator,發現已經可以編譯了,但是報告一個錯誤:”GL/gl.h:No such file or directory”。這是因為機器沒有安裝OpenGL庫,執行下面的語句安裝即可:

sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev

安裝完成後,再次編譯執行,發現示例程式成功執行起來了:

在某些情況下,我們希望在終端(Shell)下編寫Qt程式碼,而不是在Qt Creator中,下面的步驟說明了這種情況下需要做的工作:
sudo gedit ~/.bashrc

在檔案尾加上export PATH="/home/zl/Qt5.3.1/5.3/gcc/bin":$PATH


使其立即生效,在終端執行:
source ~/.bashrc

三、安裝交叉編譯器

1.建立目錄
$ sudo mkdir /usr/local/arm
2.複製檔案
檔案arm-linux-gcc-4.4.3.tar.gz,放在Desktop
進入Desktop
$ cd ~/Desktop
複製
$ sudo cp arm-linux-gcc-4.4.3.tar.gz /usr/local/arm
3.解壓檔案
進入目錄
$ cd /usr/local/arm
解壓
$ sudo tar -xzvf arm-linux-gcc-4.4.3.tar.gz
4.新增環境變數
用gedit開啟檔案bash.bashrc
$ sudo gedit /etc/bash.bashrc
在最後一行新增“export PATH=/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH”,儲存檔案
使其立即生效,在終端執行:
source ~/.bashrc

檢視版本號,若有則成功
$ arm-linux-gcc -v


四、安裝觸控式螢幕校驗工具

把tslib-1.4.tar.gz放到一個目錄下,比如/opt目錄下。接著執行命令如下:
       #tar zxvf tslib-1.4.tar.gz
執行命令cd tslib,進入tslib當前目錄,接著執行命令如下:
       #./autogen.sh

出現錯誤:
  ./autogen.sh: 4: autoreconf: not found
  是在不同版本的 tslib 下執行 autogen.sh 產生。它們產生的原因一樣,是
因為沒有安裝
  automake 工具,     用下面的命令安裝好就可以了。
  sudo apt-get install autoconf automake libtool

安裝完後繼續/autogen.sh
然後接著執行配置命令:
       #./configure     --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
最後執行編譯命令和安裝命令如下:
      1.        make 
      2.        make install


五、編譯QT


將原始碼qt-everywhere-opensource-src-4.8.6.tar.gz 進行解壓,並複製三份到/usr/local目錄下,並分別命名為qt-pc,qt-x86,qt-arm。

1.編譯PC版


進入qt-pc目錄,執行如下操作:
#./configure
# make
# make install

完成後進入usr/local/trolltech看看是否有QT-4.8.6

修改環境變數
執行
# gedit ~/.profile
到最後一行,複製程式碼 export QTDIR=/usr/local/Trolltech/Qt-4.8.1
export PATH=/usr/local/Trolltech/Qt-4.8.1/bin:$PATH
( PATH=$QTDIR/bin:$PATH )
export MANPATH=$QTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
儲存,退出,執行
# source ~/.profile

檢查是否成功安裝且環境變數生效
# qmake –v
顯示
QMake version 2.01a
Using Qt version 4.8.1 in /usr/local/Trolltech/Qt-4.8.1/lib

為下一步編譯X86版本安裝檔案

sudo apt-get install libx11-dev  libxext-dev libxtst-dev  libqt4-dev xorg-dev

2.編譯x86版

進入qt-x86目錄,執行如下操作:
# ./configure  -embedded x86    -qt-gfx-qvfb    -qt-kbd-qvfb   -qt-mouse-qvfb
# make
# make install
安裝過程比較長,沒有碰到過錯誤。
編譯安裝PC版中的 qvfb:
進入qt-pc/tools/qvfb/目錄,執行如下操作:
#make

出現undefined reference to `png_write_chunk'等
collect2: ld 返回 1
make: *** [../../bin/qvfb] 錯誤 1

解決辦法:
第一步:#locate libpng

第二步:建立連結#ln -s /lib/i386-linux-gnu/libpng12.so.0 /lib/i386-linux-gnu/libpng.so

第三步:修改Makefile檔案,#gedit Makefile(或者 #vi Makefile),在LIBS後面新增-L/lib/i386-linux-gnu -lpng這兩項

重新make後,成功!

編譯完畢,將qt-pc/bin目錄下的qvfb檔案複製到/usr/local/Trolltech/QtEmbedded-4.8.6/bin目錄。

3.編譯ARM版

進入qt-arm 目錄,執行以下操作:

./configure -prefix  /usr/local/Trolltech/QtEmbedded-4.8.6-arm -opensource -confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-g++ -depths 16,18,24 -fast -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian  -host-little-endian -no-qt3support  -no-libtiff   -no-libmng -no-opengl -no-mmx  -no-sse  -no-sse2 -no-3dnow -no-openssl -no-webkit -no-qvfb -no-phonon -no-nis -no-opengl -no-cups -no-glib -no-xcursor   -no-xfixes  -no-xrandr   -no-xrender   -no-separate-debug-info -nomake examples  -nomake tools  -nomake docs -qt-mouse-tslib  -I/usr/local/tslib/include  -L/usr/local/tslib/lib  -force-pkg-config

出現錯誤:tslib測試失敗
解決辦法:

在/usr/local/qt-arm/mkspecs/qws/linux-arm-g++的qmake.conf 中新增

QMAKE_INCDIR=/usr/local/tslib/include
QMAKE_LIBDIR=/usr/local/tslib/lib

gedit  /root/.bashrc
新增
export PATH=/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH
source  /root/.bashrc

gedit /etc/profile
新增
export PATH=/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH
source /etc/profile

重新輸入上面的一大段configure

配置完成後
make
make install

備選:
(在軟體中心安裝QTDesigner,QTliguist,QT助手)


六、測試qvfb

現在終端輸入命令:qvfb -width 800 -height 480 &  開啟虛擬緩衝端;
然後就可以在QtCreator對程式進行編譯、運行了;

七、移植程式到ARM開發板(未測試)


在開發板上建立/opt/資料夾 

將linux上/opt/ts拷貝到開發板的/opt/下,然後進入./ts/etc/ts.conf修改第二行
,將#號和空格去掉
 
 
進入到/usr/local/Trolltech/Qt-arm/lib 
通過命令 cp XXXXXX -d /utuLinux2.6/s3c2440_recover/usr/local/Trolltech/Qt-arm/lib
將linux本機上的四個庫檔案及其相關的連線符號檔案一起考到開發板的資料夾下。
(-d 引數會同時修改連結符號檔案指向)。
 XXXXXX  

libQtCore.so.4.8.6
libQtSql.so.4。8.6 

libQtNetwork.so.4.8.6 
libQtGui.so.4.8.6    
例項: 
cp libQtCore.so* -d /utuLinux2.6/s3c2440_recover/usr/local/Trolltech/Qt-4.6.3-arm/lib/   

修改新增開發板/etc/profile  

export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH 
export QTDIR=/usr/local/Trolltech/Qt-arm 
export QPEDIR=$QTDIR export T_ROOT=/opt/ts 

export PATH=$T_ROOT/bin:$PATH 

export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH 
export TSLIB_CONSOLEDEVICE=none 
export TSLIB_FBDEVICE=/dev/fb0 
export TSLIB_TSDEVICE=/dev/event0 

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts 
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf 
export TSLIB_CALIBFILE=/etc/pointercal 
export QWS_KEYBOARD=USB:/dev/input/event1 
export QWS_MOUSE_PROTO=Tslib:/dev/event0 
export QWS_DISPLAY=LinuxFb:mmWidth45:mmHeight60:0 
export QWS_SIZE=320x240   

然後qmake –project 
qmake 

這裡需要修改Makefile: 
修改當前生成的Makefile 
在19行的最後加上 -lts 

LIBS = $(SUBLIBS)  -L/usr/local/Trolltech/Qt-4.6.3-arm/lib -lQtGui -L/opt/ts/lib -L/usr/local/Trolltech/Qt-4.6.3-arm/lib -lQtNetwork -lQtCore -lpthread –lts  

進到開發板的lib庫下面 
cd /lib 

ln -s libstdc\+\+.so.60.0.3 libstdc\+\+.so.6  

並且在開發板根目錄下面建立/tmp/目錄  

make 

執行可執行檔案時要在後面加上 –qws   

FAQ:   

1 執行自己的qt程式之前,請先執行/opt/ts/bin/ts_calibrate校準觸控式螢幕,不然自己的qt程式不能使用觸控式螢幕,會提示:Could not read calibration: "/etc/pointercal"