1. 程式人生 > >Linux PC和ARM版的QT環境設定及到ARM移植&常見錯誤解決方法

Linux PC和ARM版的QT環境設定及到ARM移植&常見錯誤解決方法

* *********安裝前,系統更新,能夠減少未知情況出現

1 PC版本

http://blog.csdn.net/chchchdx123/article/details/6911267

在終端中輸入:sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer qt4-qmlviewer 

◆qt4-dev-tools 中包括了Qt Assistant,Qt Linguist,Qt Creator

◆qt4-doc 這個是幫助文件

◆qt4-qtconfig Qt的配置工具,這個裝好預設好

◆qt4-demos 官方的一些Demo

◆qt4-designer 視覺化窗體設定工具

◆qt4-qmlviewer 和qtcreator相關

安裝後,沒有安裝Qt Creator,在Ubuntu 圖形桌面上點選左側的Ubuntu Software Center,搜尋Qt ,選擇Qt Creator

完成後,在terminal命令列執行命令 qtcreator啟動Qt Creator了

注:如果需要編譯特定版本的,如4.8.5,則:

(1) 安裝一些依賴包

sudo apt-get install libX11-dev libXext-dev libXtst-dev

sudo apt-get install arm-linux-g++

sudo apt-get install g++

(2) 下載Qt原始碼包 qt-everywhere-opensource-src-4.8.5.tar.gz,解壓後進入目錄

用命令 sudo ./configure -prefix /usr/local/Trolltech/Qt-4.8.5;sudo make;sudo make install即可 

2 ARM版本

注:以下所使用的交叉編譯工具為arm-linux-gnueabi

(1)下載Qt原始碼包 qt-everywhere-opensource-src-4.8.5.tar.gz,並解壓,在mkspecs 中qws /linux-arm-gnueabi-g++ 資料夾下的qmake.conf

修改為如下,arm-linux-gnueabi-g++ 為sudo apt-get install arm-linux-g++ 安裝在usr/bin 中的

QMAKE_CC                = arm-linux-gnueabi-gcc
QMAKE_CXX               = arm-linux-gnueabi-g++
QMAKE_LINK              = arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabi-objcopy
QMAKE_STRIP             = arm-linux-gnueabi-strip


(2) 解壓後進入該資料夾,執行.

./configure -prefix  /usr/local/Trolltech/Qt-4.8.5 -opensource -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -no-webkit -qt-libtiff -qt-libmng  -qt-libjpeg -qt-libpng -no-qt3support -nomake demos -nomake docs -nomake examples -little-endian -host-little-endian -fast -lrt

(3) 執行make,及make install命令,一般時間比較長,  進入bin裡 ,mv qmake arm-qmake ,重新命名

(4) 完成後修改mkspecs檔案的許可權,供qt creator使用: sudo chmod 775 mkspecs -R

(5) 配置qt creator:工具->選項->Qt4   找到“手動設定”增加一個,qmake路徑填第二步中的安裝目錄下的qmake路徑,”usr/local/Trolltech/QtEmbedded-4.8.5-arm/bin/qmake“

(6)配置完成後,開啟專案後點左側“專案”,選擇剛才配置的Qt版本即可編譯生成arm版程式了

3 移植到ARM

(1)需要將usr/local/Trolltech/QtEmbedded-4.8.5-arm/lib移植到ARM板上相同的位置,將plugins裡的.so也移入..../QtEmbedded-4.8.5-arm/lib

(2) 對(1)中的lib/下的.so做連結

ln -s libQtDeclarative.so.4.8.5 libQtDeclarative.so
ln -s libQtDeclarative.so.4.8.5 libQtDeclarative.so.4
ln -s libQtDeclarative.so.4.8.5 libQtDeclarative.so.4.8


ln -s libQtGui.so.4.8.5 libQtGui.so
ln -s libQtGui.so.4.8.5 libQtGui.so.4
ln -s libQtGui.so.4.8.5 libQtGui.so.4.8

......

注:(1)(2) 也可以用壓縮打包整個lib,拷貝過去來實現

(3)vi ~/.bashrc 檔案,加入

QTDIR=usr/local/Trolltech/QtEmbedded-4.8.5-arm

export QTDIR

PATH=$QTDIR/bin:$PATH

export PATH

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH

//////$QTDIR/bin: arm-qmake位置

//////$QTDIR/lib: Qt庫位置

4 一些常見錯誤

(1) “QMAKESPEC has not been set”,解決方案:sudo gedit ~/.bashrc ,新增內容:export QMAKESPEC=usr/local/Trolltech/QtEmbedded-4.8.5-arm/mkspecs/qws/linux-arm-gnueabi-g++

(2) 安裝了多種版本的QT,如果想預設使用QtEmbeddedb版本,可以在上述檔案中加入:export PATH=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin:$PATH 

(3) 配置完成後,可使用qmake -project;qmake;make進行工程編譯

(4) arm開發板的終端打不開,出現"grantpt failed:..."問題,可以輸入:mount -o remount,gid=5,mode=620 /dev/pts  回車

(5) Qtcreator配置出現,沒有編譯鏈,則可加入GCCE編譯鏈,目標位置就是linux-none-arm-guneabi-g++所在位置

(6) 出現qmlviewer 沒有安裝的問題,可從/usr/bin裡將qml開頭的三個可執行檔案拷到usr/local/Trolltech/QtEmbedded-4.8.5-arm/bin下

(7) make 出現arm-none-linux-gnueabi-g++命令未找到,如果確定環境變數已經新增,則檢查檔案所屬賬號是不是你現在賬戶;環境變數如果一直不對,可以關掉終端,新開一個,重新設定

(8) 如果開發板執行程式的時候出現 cannot mix incompatible Qt library with this library,查詢資料,大家都說最可行性的解決方案是卸乾淨,重新編譯,自己花了好長時間重新編譯後,發現還是一樣。然後用ldd <filename> 查看了執行檔案依賴的庫,發現程式有部分連結到了開發板上的Qt庫。做了Qt動態庫的全部ln(具體見第3部分)

//////////////////////////////////////////////////////////////////////////////////////////////////////由於專案需要,需要加入觸屏,編譯過程中發現不同與之前的新的問題,記錄如下

一 觸屏庫tslib的編譯

1 下載相應的工具

do apt-get install automake
sudo apt-get install autogen
sudo apt-get install autoconf
sudo apt-get install libtool
2 很重要的一步,設定 CC和CXX
export CC=.... ,export CXX=...,一般CC=arm-linux-gcc ,CXX=arm-linux-g++,我的交叉編譯環境是arm-none-linux-gnueabi-gcc,arm-none-linux-gnueabi-g++,輸入命令 export CC=arm-none-linux-gnueabi-gcc export CXX=arm-none-linux-gnueabi-g++
3 編譯
cd tslib
./autogen.sh
echo  "ac_cv_func_malloc_0_nonnull=yes" > arm-none-linux-gnueabi.cache #(這樣做到目的是避免出現undefined reference to rpl_malloc錯誤)
./configure --host=arm-none-linux-gnueabi CC=<你的cc編譯器所在路徑> CXX=<你的++編譯器所在路徑> --cache-file=arm-none-linux-gnueabi.cache -prefix=/usr/local/tslib
make
make install
4 檢查,可進入/usr/local/tslib/bin 裡,file ts_test(或其他檔案) 如果顯示ARM,表明編譯正確,如果顯示80386表明你用的不是交叉編譯器,而是系統的gcc。
注:因為版本不一致,導致編譯QT時一直出現 fail to find tslib function...,加入-verbose選項,打印出/opt/../ld:cannot find -lts(tslib和qt編譯器版本不對應造成)。
二 編譯QTe 4.8.5
參考 http://blog.csdn.net/chchchdx123/article/details/6911267
1 編譯指令需要改為
./configure -opensource -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -no-webkit -qt-libtiff -qt-libmng  -qt-libjpeg -qt-libpng -no-qt3support -nomake demos -nomake docs -nomake examples -little-endian -host-little-endian -no-xcursor -no-mouse-linuxtp -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib -fast -lrt
不需要滑鼠的話就加上綠色的文字,並且修改./src/gui/embedded/qwscursor_qws.h,在檔案頭部加上#define QT_NO_QWS_CURSOR
2 編譯器最好在qws/linux-arm-gnueabi-g++/qmake.conf中指定完全的路徑,否則可能出現一些奇怪的錯誤。
三 移植到開發板
如果開發板中沒有tslib庫,則需要進行移植
1 將tslib庫拷到開發板 /usr/local/tslib
2 修改ts.conf 
vi /usr/local/tslib/etc/ts.conf -》將#module_raw input前的#去掉
3 vi /etc/profile 新增

TSLIB_TSDEVICE 和QWS_MOUSE_PROTO這兩項需要檢視自己的板子的觸控式螢幕裝置對應/dev/input/下哪個檔案
可用cat /proc/bus/input/devices檢視
具體可參考部落格http://blog.163.com/zhuandi_h/blog/static/180270288201222310291262/

[轉]ubuntu bits/predefs.h:沒有那個檔案或目錄

解決方法: 1. 確定你的系統是x86_64 GNU/Linux        [email protected]ktop:/home/mm/android#uname -a        Linuxmm-desktop 2.6.27-9-generic #1 SMP Thu Nov 20 22:15:32 UTC 2008  x86_64 GNU/Linux   安裝libc6-dev-i386      sudoapt-get install libc6-dev-i3862. 32位系統:sudoapt-get installlibc6-dev3. 輸入sudoapt-get install gcc-multilib即可
參考