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
會出錯,如下:
QT 嵌入式編譯出錯:cc1: fatal error: .pch/release-shared-emb-arm/QtGui: No such file or directory 解決方案:
老的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平台上運行應用程序前,應根據自己平台的實際情況提前設置好下面幾個環境變量:
- export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt-5.3.2/armv7-a/plugins/platforms
- export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
- export QT_QPA_FONTDIR=/opt/Qt-5.3.2/armv7-a/lib/fonts
- 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
把新的庫文件替換原來的。