自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qt移植學(xué)習(xí)之路 QT4.5.3至mini2440

移動(dòng)開(kāi)發(fā)
Qt移植學(xué)習(xí)之路 QT4.5.3至mini2440是本文介紹的內(nèi)容,關(guān)于移植我們應(yīng)該接觸過(guò)很多相關(guān)內(nèi)容,先來(lái)看本文介紹。

本文介紹的是Qt移植學(xué)習(xí)之路 QT4.5.3至mini2440,終于成功移植QT 4.5.3至mini2440,并能運(yùn)行QT自帶的應(yīng)用程序,總得來(lái)說(shuō)還算很順利,下面是我移植的全部過(guò)程。

首先,我交待一下我的開(kāi)發(fā)環(huán)境:

宿主機(jī):Fedora9 

主機(jī)Gcc:gcc 版本 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)

交叉編譯器:arm-linux-gcc-4.3.2 (友善光盤(pán)自帶)

開(kāi)發(fā)板:mini2440(NAND 128M  SDRAM 64M)

移植步驟:

1.準(zhǔn)備源碼包

從ftp://ftp.qt.nokia.com/qt/source/ 下載:qt-embedded-linux-opensource-src-4.5.3.tar.gz和

qt-x11-opensource-src-4.5.3.tar.gz

前者是移植到開(kāi)發(fā)板上運(yùn)行的,后者是方便在X86機(jī)上開(kāi)發(fā)應(yīng)用程序,待一切調(diào)試成功再經(jīng)交叉編譯后下載到開(kāi)發(fā)板上運(yùn)行。

從網(wǎng)上下載tslib-1.4.tar.gz包,這包用于管理觸摸屏,例如可用于它來(lái)校正觸摸屏,并保存校正數(shù)據(jù)。

2.編譯安裝tslib-1.4

把tslib-1.4 COPY到Fedora9的 /opt下,在Fedora9的終端下執(zhí)行:

  1. #cd /tmp  
  2. # tar zxvf tslib-1.4.tar.gz       ――――――――(最后在/tmp下解壓生成tslib)  
  3. #cd  tslib   
  4. #./autogen.sh  
  5.     #./configure --prefix=/home/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes 
  6.     #make  
  7. #make install 

成功后可在/home下生成mytslib,進(jìn)入mytslib可以看到有bin include lib etc四個(gè)文件夾。我們暫時(shí)先不理它,在接下來(lái)的移植過(guò)程中才用到這些文件夾。

3. 編譯安裝QT-X11-4.5.3

QT-X11-4.5.3是運(yùn)行于linux平臺(tái)下用于仿真QT應(yīng)用程序的軟件,這樣你便可以在linux平臺(tái)下把你應(yīng)用程序都調(diào)試好,然后再利用QT4.5.3把應(yīng)用程序編譯成ARM版本下載至開(kāi)發(fā)板,這樣你就可以在開(kāi)發(fā)板上運(yùn)行你的QT應(yīng)用程序了。

下面是安裝步驟:

首先把qt-x11-opensource-src-4.5.3.tar.gz 拷貝到Fedora9下的/tmp目錄下,接著執(zhí)行:

  1. #tar zxvf qt-x11-opensource-src-4.5.3.tar.gz  
  2. #cd qt-x11-opensource-src-4.5.3  
  3. #./configure  
  4.     #gmake      //一般用時(shí)2-3小時(shí),如果你的機(jī)子配置不太低的情況下  
  5. #gmake install 

安裝OK后,在/usr/local/目錄下生成Trolltech目錄,這就是我們要用于在x86平臺(tái)(Fedora9)下開(kāi)發(fā)應(yīng)用程序時(shí)所依賴(lài)的一些目錄?,F(xiàn)在你可以進(jìn)入/usr/local/Trolltech/Qt-4.5.3/examples下,進(jìn)入一個(gè)例子,比如進(jìn)入/usr/local/Trolltech/Qt-4.5.3/examples/widgets/analogclock下,你會(huì)發(fā)現(xiàn),這個(gè)例子都已經(jīng)編譯好了,在Fedora9的終端下直接運(yùn)行:

  1. #./analogclock –qvfb  

則在Fedora9的屏幕上出現(xiàn)下圖:

Qt移植學(xué)習(xí)之路 QT4.5.3至mini2440

也許你會(huì)想,我是否能重新編譯一遍analogclock呢?因?yàn)閍nalogclock目錄下有一個(gè)Makefile,于是執(zhí)行:

  1. #make clean  
  2. #qmake –project   

唉,你會(huì)發(fā)現(xiàn),提示說(shuō)找不到命令“qmake”,怎么辦呢?很簡(jiǎn)單,因?yàn)槲覀冞€沒(méi)有設(shè)置環(huán)境變量,當(dāng)然會(huì)找不到命令啦。  

讓我們來(lái)設(shè)置一下QT-X11-4.5.3的環(huán)境變量,首先進(jìn)入你的安裝QT-x11-4.5.3目錄:

  1. #cd /opt/qt-x11-opensource-src-4.5.3 

在此目錄下建立一個(gè)名為:qt_x11_setenv.sh的shell文件,內(nèi)容如下:

  1. #!bin/bash  
  2. PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH  
  3.     QTDIR=/usr/local/Trolltech/QT-4.5.3  
  4.     MAINPATH=$QTDIR/man:$MAINPATH  
  5.     LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  
  6. export PATH QTDIR MAINPATH   LD_LIBRARY_PATH  
  7. echo "     set qt-x11 env. successful    " 

保存退出,在終端執(zhí)行:

  1. #source qt_x11_setenv.sh 

終端回顯:set qt-x11 env. successful

  1. #echo $QTDIR 

終端回顯:/usr/local/Trolltech/QT-4.5.3 ――――――說(shuō)明:環(huán)境變量設(shè)置成功。

在這之后,我們?cè)賵?zhí)行一下:

  1. #qmake –project    (建立*.pro文件)   
  2. #qmake          (產(chǎn)生Makefile文件)   
  3. #make            (編譯產(chǎn)生可執(zhí)行程序) 

如果沒(méi)有錯(cuò)誤將生成analogclock可執(zhí)行程序,終端執(zhí)行:

  1. #./analogclock –qvfb   

看看是否出現(xiàn)畫(huà)面了~~~~~~~~~~

注意一點(diǎn):

在每次進(jìn)入qt-x11-linux-opensource-src-4.5.3目錄中要 #source setenv-x11.sh

把環(huán)境變量設(shè)置好,否則又會(huì)出現(xiàn)無(wú)法編譯。

成功后,是不是有點(diǎn)迫不及待地想自己試驗(yàn)一個(gè)QT程序呢,讓我們來(lái)編寫(xiě)一個(gè)hello程序吧!

  1. #cd qt-x11-linux-opensource-src-4.5.3/ /opt/qt-x11-opensource-src-4.5.3/examples/  
  2. #mkdir hello  
  3. #vi hello.cpp     

然后把下列源程序COPY到hello.cpp中。

  1. #include <QApplication>   
  2. nclude <QPushButton> 
  3.  int main(int argc, char *argv[])  
  4.       {  
  5.            QApplication app(argc,argv);  
  6.            QPushButton b("Hello World !");  
  7.               b.show();  
  8.               QObject::connect(&b,SIGNAL(clicked()),&app,SLOT(quit()));  
  9.                return app.exec();  
  10.         } 

進(jìn)入前記得執(zhí)行source setenv-x11.sh

 

  1. # qmake –project (產(chǎn)生hello.pro文件)  
  2. #qmake            (產(chǎn)生Makefile文件)  
  3. #make              (執(zhí)行Makefile以生成可執(zhí)行程序) 

如果不出錯(cuò)在當(dāng)前目錄下生成hello可執(zhí)行程序,既然生成了,那還等什么,執(zhí)行吧。

  1. #./hello –qvfb   

我執(zhí)行后就出圖了,你的呢?

Qt移植學(xué)習(xí)之路 QT4.5.3至mini2440

其實(shí)圖是可以拉大的,你試試!

4.編譯安裝QT4.5.3

首先我們建立兩個(gè)目錄用來(lái)存放接下來(lái)編譯出來(lái)的一些目標(biāo)文件,在Fedora9的根目錄下建立mini2440 和 tslib兩個(gè)目錄,終端執(zhí)行:

  1. #cd /  
  2. #mkdir mini2440   
  3. #mkdir tslib 

接下來(lái)我們把qt-embedded-linux-opensource-src-4.5.3.tar.gz COPY到/tmp下, 終端執(zhí)行:

 

  1. #cd /tmp  
  2. #tar zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz   
  3. #cd qt-embedded-linux-opensource-src-4.5.3 
  1. #./configure -prefix /mini2440  -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg   
  2. -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis  
  3.  -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info   
  4. -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb   
  5. -confirm-license -qt-mouse-tslib -I/home/mytslib/include -L/home/mytslib/lib 

上面最后一句“-I/home/mytslib/include -L/home/ mytslib/lib ”指明我們剛才編譯出來(lái)觸摸屏的庫(kù)文件及頭文件存放路徑。它前面的“-qt-mouse-tslib”表示將使用觸摸屏。

然后執(zhí)行:

  1. #gmake  
  2. #gmake install 

上面編譯時(shí)間較長(zhǎng),一般要2到3個(gè)小時(shí)。

這樣,嵌入式版本的qt4裝成功了,若想進(jìn)行交叉編譯,首先也得改變環(huán)境變量,所以也可以在當(dāng)前目錄下建一個(gè)環(huán)境變量的文件setenv-embedded.sh 如下:

  1. #gedit setenv-embedded.sh 

這時(shí)跳出一個(gè)編輯文本輸入:

  1. PATH=/mini2440/bin:$PATH  
  2. QTDIR=/mini2440  
  3. MAINPATH=$QTDIR/man:$MAINPATH  
  4. LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  
  5. export PATH QTDIR MAINPATH   LD_LIBRARY_PATH 

保存退出。每次進(jìn)行qt4-embedded的交叉編譯前先# source setenv-embedded.sh,注意我們?cè)诰幾gQT應(yīng)用程序時(shí)要用到上述變量。下文會(huì)提到。

#p#

4. 移植相關(guān)庫(kù)文件至開(kāi)發(fā)板

首我們得準(zhǔn)備一個(gè)文件系統(tǒng),我是根據(jù)友善提供的文檔制作了一個(gè)文件系統(tǒng),路徑為/opt/studyarm/rootfs, 其中rootfs就是我的根文件系統(tǒng)。

首先在rootfs 的根目錄下建立兩個(gè)目錄:

在開(kāi)發(fā)板的終端下執(zhí)行:

  1. #cd /  
  2. #mkdir mini2440  
  3. #mkdir tslib 

接下來(lái)我們要COPY我們剛才編譯生成的一些庫(kù)文件及配置文件至開(kāi)發(fā)板上的mini2440, tslib。我是用NFS方式掛載文件系統(tǒng)的,當(dāng)然你可以用其它下載方式把目標(biāo)庫(kù)文件等下載到你的開(kāi)發(fā)板就行。

因?yàn)槭怯肗FS掛載方式,所以我在Fedora9終端上執(zhí)行:

  1.    #cp –rf /home/mytslib/lib  /opt/studyarm/rootfs/tslib/  
  2.    #cp –rf /home/mytslib/etc /opt/studyarm/rootfs/tslib/  
  3.    #cp –rf /mini2440/lib /opt/studyarm/rootfs/mini2440/  
  4. #cp –rf /home/mytslib/etc /opt/studyarm/rootfs/tslib  
  5. #cp /home/mytslib/bin/ts_calibrate /opt/studyarm/rootfs/bin  
  6. #cp /home/mytslib/bin/ts_test /opt/studyarm/rootfs/bin  
  7. 編輯開(kāi)發(fā)板/etc/profile,用來(lái)在在開(kāi)發(fā)板上設(shè)置環(huán)境變量,開(kāi)發(fā)板終端輸入內(nèi)容如下:  
  8. Cat >> /etc/profile/ << EOF 
  9. (當(dāng)然也可以一個(gè)一個(gè)變量敲入,但是這種方法設(shè)置的變量在斷電重新上電后又得設(shè)置一遍很麻煩,所以把變量直接寫(xiě)入/etc/profile后,系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)更新變量,很簡(jiǎn)便)  
  10. export  QTDIR=/mini2440  
  11. export  T_ROOT=/tslib  
  12. export  PATH=$QTDIR/bin:$PATH  
  13. export  TSLIB_CONSOLEDEVICE=none 
  14. export  TSLIB_FBDEVICE=/dev/fb0  
  15. export  TSLIB_TSDEVICE=/dev/ event0  
  16. export  TSLIB_PLUGINDIR=$T_ROOT/lib/ts  
  17. export  TSLIB_CONFFILE=$T_ROOT/etc/ts.conf  
  18. export  TSLIB_CALIBFILE=/etc/pointercal  
  19. export  QWS_MOUSE_PROTO=tslib:/dev/event0  
  20. export  LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib  
  21. EOF 

終端輸入上述變量設(shè)置后,再執(zhí)行一下:source /etc/profile使系統(tǒng)更新一遍剛設(shè)置的系統(tǒng)環(huán)境變量。

驗(yàn)證變量設(shè)置是否成功:

在開(kāi)發(fā)板終端下執(zhí)行:

#echo $QTDIR  如果顯示  #/mini2440,則說(shuō)明設(shè)置成功了,在QT的移植過(guò)程中環(huán)境變量的設(shè)置是非常重要的,如果設(shè)置的不正確會(huì)出現(xiàn)很多問(wèn)題。

比如說(shuō):在參考別人QT移植的文章時(shí),有人環(huán)境變量設(shè)置與我的不同,主要有如下幾個(gè):

  1. export  TSLIB_FBDEVICE=/dev/input/fb0    
  2. export  TSLIB_TSDEVICE=/dev/input/event0  
  3. export  QWS_MOUSE_PROTO=tslib:/dev/input/event0 

注意到?jīng)]有:他們的環(huán)境變量中,fb0,event0設(shè)備都在/dev/input下,而我查看了我的/dev下沒(méi)有input目錄,所以這點(diǎn)要根據(jù)自已所做文件系統(tǒng)的實(shí)際情況來(lái)設(shè)置這些變量。

接下來(lái)我們還得設(shè)置一下觸摸屏的配置文件ts.conf. 它在哪里呢?前面我們把mytslib下的etc目錄COPY到了開(kāi)發(fā)板的/tslib/下,那么tslib一共就有bin及etc兩個(gè)目錄,而ts.conf就在etc目錄下,開(kāi)發(fā)板下用vi /tslib/etc/ts.conf

把# module_raw collie 前面的“#”號(hào)去掉,然后把該行移至行首,最后我的配置文件如下:

  1. module_raw collie  
  2. module pthres pmin=1 
  3. module variance delta=30 
  4. module dejitter delta=100 
  5. module linear   

自執(zhí)行source /etc/profile后,開(kāi)發(fā)板的環(huán)境變量就完全設(shè)置好了,并且QT4.5.3的移植也基本完成了,這所以說(shuō)基本,是因?yàn)楝F(xiàn)在可以運(yùn)行QT程序了,但是還需要進(jìn)一步的做一些移植,比如說(shuō)字庫(kù),中文顯示等等。接下來(lái)將驗(yàn)證tslib及QT4.5.3是否移植成功。

5. 測(cè)試觸摸屏校正

在開(kāi)發(fā)板終端下執(zhí)行:

  1. #ts_calibrate      ---------觸摸較正程序 

運(yùn)行該程序后,屏幕將出現(xiàn)五點(diǎn)校正畫(huà)面,依次點(diǎn)擊五點(diǎn)后,將生成觸摸屏校正數(shù)據(jù)文件/etc/pointercal.

  1. #ts_test         ----------觸摸屏拖曳測(cè)試程序 

運(yùn)行后屏幕出現(xiàn)drag,draw  依次選擇后進(jìn)行測(cè)試,同時(shí)終端下出現(xiàn)拖曳后的取點(diǎn)數(shù)據(jù)。

6.運(yùn)行QT應(yīng)用程序以驗(yàn)證QT4.5.3是否移植成功

我們要編譯一些例子程序,同時(shí)將它們下載至開(kāi)發(fā)板運(yùn)行。

在終端下首先檢測(cè)一下環(huán)境變量,因?yàn)樵趒t-embedded-linux-opensource-src-4.5.3下編譯應(yīng)用程序要依賴(lài)于它所生成的一些庫(kù),我們?cè)谇懊娴?步,不是在主機(jī)/mini2440下生成了一些庫(kù)和其它文件么?其中/mini2440/lib我們移植到了開(kāi)發(fā)板,這些庫(kù)和其它目錄中的文件我們編譯QT應(yīng)用程序時(shí)也是要依賴(lài)它們的,所以環(huán)境變量路徑是否設(shè)置正確直接影響應(yīng)用程序編譯是否成功。

主機(jī)終端執(zhí)行:

#echo $QTDIR  ――――回顯為“/mini2440”則說(shuō)明環(huán)境變量設(shè)置OK,如果回顯為空,或者為其它路徑,則要source setenv-embedded.sh一下,不明白的請(qǐng)回到第3步再看一遍。

環(huán)境變量測(cè)試沒(méi)問(wèn)題,那么就可以編譯QT程序了。

  1. #cd  ……/ qt-embedded-linux-opensource-src-4.5.3/ examples/mainwindows/application/  
  2. #qmake –project      (如果提示無(wú)“qmake”命令,則肯定是你的環(huán)境變量的路徑設(shè)置不正確,或者source setenv-embedded.sh一下即可)  
  3. #qmake     (成生Makefile)  
  4. #make      (生成可執(zhí)行程序) 

至此,如果你沒(méi)發(fā)生什么錯(cuò)誤應(yīng)該可以在application下看到“application”的可執(zhí)行程序了,把它下載到你的開(kāi)發(fā)板下并執(zhí)行:

  1. #./application –qws    

現(xiàn)在可以看到屏幕上的對(duì)話框了吧?可能顯示的不是很“正”,(但可以用觸摸筆把它拖到屏中央),并且字也不是看得很清。

你可以編譯其它自帶的例子運(yùn)行試試看。

接下來(lái)的工作就是如何把修正字體等其它工作。但初步移植算是成功了。

7. QT自帶例子運(yùn)行出現(xiàn)錯(cuò)誤

編譯home/qt-4.5.3/qt-embedded-linux-opensource-src-4.5.3/examples/widgets/imageviewer

成功后,下載板子后運(yùn)行,出現(xiàn):Segmentation fault,但多運(yùn)行幾次發(fā)現(xiàn)可以運(yùn)行,也就是說(shuō)偶爾會(huì)出現(xiàn)不能運(yùn)行的錯(cuò)誤,這是一個(gè)經(jīng)典問(wèn)題。很多文章介紹說(shuō)是編譯器的問(wèn)題。

有的網(wǎng)友說(shuō):EABI的編譯器編譯出來(lái)的Qt-4.5的程序都會(huì)出現(xiàn)段錯(cuò)誤。原因不明。這個(gè)我不敢茍同,因?yàn)槲以嚵撕芏嘧詭У睦?,用帶EABI的編譯器arm-linux-gcc-4.3.2-EABI是可以運(yùn)行的。

百度了一下,發(fā)現(xiàn)有價(jià)值的文章不多,下引自一網(wǎng)友的BLOG:http://zhubangbing.blog.163.com/blog/static/52609270200993015132315/

c/c++/qt中的段錯(cuò)誤(segment fault)

關(guān)于內(nèi)存的那些話就不說(shuō)了,被一幫會(huì)裝會(huì)轉(zhuǎn)載的人說(shuō)爛了,這里只說(shuō)我在寫(xiě)程序時(shí)遇到段錯(cuò)誤的原因,如何解決的,總之一句話,涉及到指針的,你不能在未定義,未初始化,未 “new” 之前使用,否則等待你的肯定是 segment fault,然后程序直接退出

1. 類(lèi)A在執(zhí)行中可能會(huì)幾次用到用到類(lèi)B,也可能只有一次用到,也可能一次都不用,這種情況下我的習(xí)慣就是在類(lèi)A的構(gòu)造函數(shù)中初始化B類(lèi)對(duì)象為NULL,然后在用的地方先判斷B是否實(shí)例化,未實(shí)例化,實(shí)例化,然后使用,delete B類(lèi)對(duì)象時(shí)也要先判斷下B是否實(shí)例化
    因?yàn)檫@里已經(jīng)初始化了類(lèi)B的對(duì)象,使用時(shí)容易出的錯(cuò)誤是在判斷是否實(shí)例化時(shí),如果在判斷類(lèi)本身是否實(shí)例化之前,判斷了(或者說(shuō)使用了)類(lèi)B的成員函數(shù)/成員變量,出現(xiàn)段錯(cuò)誤,因?yàn)檫@個(gè)類(lèi)不存在,其成員函數(shù)/變量也不存在
例子:
A 的構(gòu)造函數(shù)中有這樣一句this->m_b = NULL;//將B類(lèi)對(duì)象 m_b初始化為NULL ,此處B類(lèi)為QThread的子類(lèi)使用中

  1. void new_b()  
  2. {  
  3.     if(!this->m_b)  
  4. {  
  5.     this->m_b = new B;  
  6.     this->m_b->start();  
  7.     .....  
  8. }  
  9. }  
  10. void delete_b()  
  11. {  
  12.     if(this->m_b||this->m_b->isRunning())//delete B 類(lèi)對(duì)象時(shí)判斷條件  
  13.     {  
  14.             while(!this->m_b->isFinished())  
  15.             {  
  16.                 this->m_b->quit();  
  17.                 this->m_b->wait(500);  
  18.             }  
  19.             delete this->m_b;  
  20.             this->m_b = NULL;  
  21.     }  

這樣使用時(shí),在只調(diào)用一次delete_b()時(shí),可能不會(huì)出問(wèn)題,因?yàn)檫@個(gè)時(shí)候m_b可能已經(jīng)實(shí)例化了,所以程序只要判斷到 this->m_b 為真,就會(huì)認(rèn)為if條件為真,然后往下執(zhí)行,但是問(wèn)題是,如果調(diào)用了兩次 delete_b()或者在調(diào)用之前m_b沒(méi)有 new_b(),那么判斷時(shí)this->m_b為假,程序就會(huì)繼續(xù)判斷this->m_b->isRunning()是否為真,這就出現(xiàn)段錯(cuò)誤了,因?yàn)閙_b未 “new”

2.兩個(gè)線程共用緩存

我們的項(xiàng)目中音頻的發(fā)送和接收是用兩個(gè)線程實(shí)現(xiàn)的,線程的結(jié)束時(shí)間是不可控的,線程達(dá)到結(jié)束條件時(shí)肯定需要做清理工作,比如緩存的釋放,設(shè)備關(guān)閉,如果一個(gè)線程結(jié)束時(shí)沒(méi)有判斷另外一個(gè)是否結(jié)束,清理了共用的緩存,而另外一個(gè)線程又去訪問(wèn)了這個(gè)緩存,就出現(xiàn)了段錯(cuò)誤

在友善ARM9論壇上發(fā)現(xiàn)一篇可能可以解決段錯(cuò)誤的文章:

http://www.arm9home.net/read.php?tid-2993-fpage-0-toread--page-2.html

程序 qt-embedded-linux-opensource-src-4.5.0/src/gui/embedded/qscreenlinuxfb_qws.cpp
作如下修改:

  1. 410行:  
  2. /*            //EmbedSky_del start 20091208  
  3.     canaccel = useOffscreen();  
  4.     if(canaccel)  
  5.         setupOffScreen();  
  6. */            //EmbedSky_del end 20091208  
  7.     canaccel = false;  
  8.  
  9. 706行:  
  10. /*                //EmbedSky_del start 20091208  
  11.     if (canaccel) {  
  12.         *entryp=0;  
  13.         *lowest = mapsize;  
  14.         insert_entry(*entryp, *lowest, *lowest);  // dummy entry to mark start  
  15.     }  
  16. */                //EmbedSky_del end 20091208  
  17.     canaccel = false

可能解決segmentation fault問(wèn)題,請(qǐng)大家測(cè)試

[ 此帖被lpc2292在2010-03-24 14:37重新編輯 ]

有網(wǎng)友試驗(yàn)過(guò)上面修改embedded/qscreenlinuxfb_qws.cpp的方法,并成功解決此錯(cuò)誤,我暫時(shí)沒(méi)有去試,因?yàn)橐匦戮幾g一遍QT,幾個(gè)小時(shí)下來(lái),夠讓人等的。
下面引自一網(wǎng)友的文章,簡(jiǎn)單的說(shuō)明了一下段錯(cuò)誤的產(chǎn)生原因,及調(diào)試方法。

qt 段錯(cuò)誤,簡(jiǎn)單調(diào)試方法

如果Qt程序不大也不小,有些地方難免會(huì)出現(xiàn)聲明指針后沒(méi)有具體實(shí)現(xiàn)的情況。這種情況下Qt在編譯階段是不會(huì)出現(xiàn)錯(cuò)誤的,但是運(yùn)行的時(shí)候會(huì)出現(xiàn)“段錯(cuò)誤”,其他什么都不會(huì)顯示。

而段錯(cuò)誤就是你的指針訪問(wèn)了沒(méi)有分配地址的空間,或者是指針為NULL。

在這種情況下想快速確定是哪個(gè)地方出現(xiàn)的錯(cuò)誤應(yīng)該用gdb調(diào)試debug信息,但是我對(duì)那東西還不熟悉,還沒(méi)具體研究過(guò)(等我程序?qū)懙拇篌w像個(gè)樣子再說(shuō))。不過(guò)懶人我找到了一個(gè)簡(jiǎn)單的方法......

在主程序中加入qDebug("Msg");一步一步跟蹤進(jìn)實(shí)現(xiàn)函數(shù),就會(huì)知道到底是哪個(gè)地方出現(xiàn)問(wèn)題了。這個(gè)東西還挺管用的,對(duì)于我這樣的初學(xué)者就足夠了。

小結(jié):關(guān)于Qt移植學(xué)習(xí)之路 QT4.5.3至mini2440的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-27 17:15:33

Qt creator Qt Creator

2011-06-13 11:07:22

QT 移植

2011-06-24 13:08:34

Qt Qt 4.5.3 移植

2011-06-21 14:34:30

Qt Designer mini2440

2011-06-28 13:02:06

Qt Qt 4.7.3 ARM

2011-06-20 10:27:24

Mini2440 Qtopia Qt

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2011-06-13 11:24:55

QT MPlayer 移植

2011-04-22 09:32:56

開(kāi)發(fā)板Ubuntu串口

2011-07-02 13:24:39

QT Linux

2011-07-05 13:32:45

QT Mysql 驅(qū)動(dòng)

2011-06-15 18:20:20

Qt 移植 Android

2011-06-13 15:57:26

linux QT QTOPIA

2011-06-24 08:46:37

Linux Qt x11 4.5

2011-07-04 10:56:10

Qt 移植 編譯

2011-06-29 10:46:01

Qt Eembedded Linux

2011-07-04 11:29:40

QT Designer

2011-07-04 11:21:59

QT Designer

2011-06-30 16:08:05

Qt 字庫(kù) QPF
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)