一、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