qt4.8 移植到Arm 平臺



一、qt4.8  移植到Arm 平臺


1、首先找個文件夾解壓下載的qt-everywhere-opensource-src-4.8.5。打開/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf 修改編譯器爲交叉編譯器,如下:


#
# qmake configuration for building with arm-none-linux-gnueabi-g++
#


include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)


# modifications to g++.conf
QMAKE_CC                = /usr/local/arm-2011.03/bin/arm-none-linux-gnueabi-gcc
QMAKE_CXX               = /usr/local/arm-2011.03/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK              = /usr/local/arm-2011.03/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = /usr/local/arm-2011.03/bin/arm-none-linux-gnueabi-g++


# modifications to linux.conf
QMAKE_AR                = /usr/local/arm-2011.03/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /usr/local/arm-2011.03/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP             = /usr/local/arm-2011.03/bin/arm-none-linux-gnueabi-strip


load(qt_config)




2、爲了防止出現某些指令找不到的錯誤,例如no such instruction SWPB等指令錯誤,將/mkspecs/common/g++-unix.conf進行修改,將編譯優化置爲0,這樣就可以避免了。注意-O0第一個是字母,第二個是數字。你也可以設爲O2試試,據說也好使,像我這樣設編譯會很慢的。 
QMAKE_LFLAGS_RELEASE += -Wl,-O0   




3、進入qt-everywhere-opensource-src-4.8.5目錄, 配置configure文件,具體如下(重新配置用 make confclean 先清除配置):


sudo ./configure -prefix /opt/qt-4.8.5-arm -embedded armv7 -xplatform qws/linux-arm-g++ -debug-and-release -shared -fast -qt-zlib -little-endian -opensource -host-little-endian -confirm-license -nomake demos -nomake examples -nomake tools -no-webkit -no-qt3support -no-opengl -qt-libtiff -qt-libmng -qt-sql-sqlite -no-qvfb -no-svg -no-multimedia -qt-sql-sqlite -no-pch -lrt


./configure -prefix /opt/qt-4.8.5-arm -embedded armv7 -xplatform qws/linux-arm-gnueabi-g++ -debug-and-release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -armfpa




4、 sudo make




5、sudo make install






二、x86 qt編譯


1、tar -xvzf qt-everywhere-opensource-src-4.8.5.tar.gz


2、cd qt-everywhere-opensource-src-4.8.5


3、sudo ./configure -prefix /opt/qt-4.8.5-x86  (重新配置用 make confclean 先清除配置)


4、 sudo make


5、 sudo make install




在編譯過程中出錯,提示






g++: error: unrecognized command line option ‘-fuse-ld=gold’


解決方法:


這是Qt的一個bug:https://bugs.webkit.org/show_bug.cgi?id=89312
在裝有gold linker的系統裏,編譯腳本會加入-fuse-ld=gold選項,但這個選項gcc是不支持的。解決辦法是移除該選項,找到文件src/3rdparty/webkit/Source/common.pri,屏蔽QMAKE_LFLAGS+=-fuse-ld=gold。


#    QMAKE_LFLAGS+=-fuse-ld=gold








在編譯過程中出錯,提示


Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /home/duliqun/qt- everywhere-opensource-src-4.8.5/mkspecs/linux-g++.


解決方法:
 
g++在/usr/X11R6/lib下,找不到libXext.so。其原因就在於需要安裝libX11的開發包,在ubuntu/debian裏包名都是libX11-dev根據以往的經驗,在./configure前主動裝好下面3個包:sudo apt-get install libX11-dev libXext-dev libXtst-dev

發佈了32 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章