1. 程式人生 > >QT5.3.2在ARM上的移植

QT5.3.2在ARM上的移植

ubuntu10.04 準備移植phonon,4.5移植失敗。播放聲音就出錯。。。沒辦法。轉移到QtMutimedia

安裝交叉編譯工具這裡就不提了。。。

1.下載QT5.3.2:http://download.qt.io/archive/qt/

不小下載5.0,這個版本有問題。。。

2.配置

配置時需要注意的幾點是:

如果是交叉編譯,需要配置 xplatform選項,比如要在arm-linux平臺上移植Qt的話,就在配置項中加上 -xplatform linux-arm-gnueabi-g++ ,Qt5支援的交叉平臺都可在原始碼頂層目錄中的 qtbase/mkspecs/ 下找到,每個子目錄名代表一個交叉平臺的名字,移植Qt時應根據自己的實際情況修改平臺對應的子目錄下的qmake.conf檔案,它定義了一些與平臺相關的環境變數,如交叉編譯器等;

Qt5預設的qreal型別是64bit的double,如果希望用float型別定義qreal,則在配置選項中加入"-qreal float"

進qtbase//mkspecs/linux-arm-gnueabi-g++

修改qmake.conf

# modifications to g++.conf

QMAKE_CC                = arm-linux-gcc

QMAKE_CXX               = arm-linux-g++

QMAKE_LINK              = arm-linux-g++

QMAKE_LINK_SHLIB        = arm-linux-g++

# modifications to linux.conf

QMAKE_AR                = arm-linux-ar cqs

QMAKE_OBJCOPY           = arm-linux-objcopy

QMAKE_STRIP             = arm-linux-strip

load(qt_config)

注意:必須先修改qmake.conf,否則./configure會報錯:STL functionality check failed! Cannot build Qt with this STL library.
./configure -xplatform linux-arm-gnueabi-g++ -release -shared -fast -no-largefile -qt-sql-sqlite -qreal float

3.編譯

make

會出錯,如下:

老的arm-linux-gnu工具鏈不支援64位,因此需要安裝32位庫

apt-get install lsb-core  

make

make install

4.移植拷貝

拷貝/usr/local/Qt5.3.2/lib到嵌入式裝置/opt/PDA/lib

拷貝/usr/local/Qt5.3.2/plugins到嵌入式/opt/PDA/plugins

執行寫好的./Maze

需要說明的是,Qt5.0開始,Qt自身不再單獨實現視窗系統,QWS不復存在,取而代之的新機制是QPA(Qt平臺抽象),QPA使得Qt對不同平臺的支援變得更加靈活,當需要支援一個新平臺時,只需為該平臺編寫一個QPA外掛。

With the release of Qt 5.0, Qt no longer contains its own window system implementation: QWS is no longer a supported platform. For single-process use cases, theQt Platform Abstraction is a superior solution......參考 http://qt-project.org/doc/qt-5/embedded-linux.html

編譯完Qt後,只需將生成的lib和plugins資料夾拷貝到開發板,另外,當在嵌入式Linux平臺上執行應用程式前,應根據自己平臺的實際情況提前設定好下面幾個環境變數:

  1. export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt-5.3.2/armv7-a/plugins/platforms  
  2. export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0  
  3. export QT_QPA_FONTDIR=/opt/Qt-5.3.2/armv7-a/lib/fonts  
  4. export QT_QPA_GENERIC_PLUGINS=tslib:/dev/touchscreen-1wire  #使用tslib外掛  

然後就可以執行Qt程式了

以前Qt4的程式在嵌入式Linux平臺執行時,需要在命令列輸入-qws選項以啟動Qt視窗系統服務,如" ./HelloWorld -qws";而使用Qt5後,不再需要-qws,而需要通過-platform來指定要使用的QPA外掛,如" ./HelloWorld -platform linuxfb",如果不指定,則用預設的QPA外掛,預設的QPA外掛通過上面的QT_QPA_PLATFORM變數指定

結果出錯:

defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"

網上找了半天,只有WINDOWS下的解決辦法:http://blog.csdn.net/yangluoning/article/details/40428683

linux下 也一樣。。

下載對應的外掛:http://mirrors.hust.edu.cn/qtproject/archive/qt/5.3/5.3.2/submodules/qtmultimedia-opensource-src-5.3.2.tar.gz

tar zxvf qtmultimedia-opensource-src-5.3.2.tar.gz

cd  qtmultimedia-opensource-src-5.3.2

qmake

make

把新的庫檔案替換原來的。