天天看點

【海思Hi3520D開發筆記】QT4.8.6移植到hi3520d,增加Webkit插件編譯

虛拟機環境(Ubuntu 12.04-64bit)

1、解壓源碼

tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz 
           

2、進入源碼包

3、配置交叉編譯檔案

cd mkspecs/qws/
cp -rf linux-arm-g++/ linux-3520d-g++
vi linux-3520d-g++/qmake.conf
           

4、修改後的linux-3520d-g++/qmake.conf 檔案内容

#
# qmake configuration for building with arm-linux-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                = arm-hisiv100nptl-linux-gcc
QMAKE_CXX               = arm-hisiv100nptl-linux-g++
QMAKE_LINK              = arm-hisiv100nptl-linux-g++
QMAKE_LINK_SHLIB        = arm-hisiv100nptl-linux-g++

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

load(qt_config)
           

5、建立安裝目錄

mkdir /opt/Qt4.8.6-hi3520
           

6、配置安裝目錄、指令編譯器以及裁剪QT (支援webkit )

./configure --prefix=/opt/Qt4.8.6-hi3520 -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -embedded arm -platform linux-g++ -xplatform qws/linux-3520d-g++  -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -nomake toomakels
           

7、解決編譯問題

undefined reference to ‘accept4’

vi mkspecs/qws/qplatformdefs.h
//在檔案中增加下面語句
#undef O_CLOEXEC
           

8、解決編譯問題

(1)、undefined reference to ‘__sync_sub_and_fetch_4’

(2)、skipping incompatible liblinux-atomic.a when searching for -llinux-atomic

(a)使用libtool制作gcc linux-atomic.c連結庫

cd gcc-4.6.0/gcc/config/arm/
vi linux-atomic.c 
//修改 38 行的 屬性 hidden 為 default
//改變平台編譯器的AR和Randlib 軟連結
$sudo rm /usr/bin/ar && sudo ln -s /opt/hisi-linux-nptl/arm-hisiv100-linux/bin/arm-hisiv100-linux-uclibcgnueabi-ar /usr/bin/ar
$sudo rm /usr/bin/ranlib && sudo ln -s /opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux-ranlib  /usr/bin/ranlib
           

(b)編寫編譯腳本

#!/bin/bash
 
AR="arm-hisiv100nptl-linux-ar"
RANLIB="arm-hisiv100nptl-linux-ranlib"
CC="arm-hisiv100nptl-linux-gcc"

libtool --tag=CC --mode=compile arm-hisiv100nptl-linux-gcc  -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c 

libtool --tag=CC --mode=link arm-hisiv100nptl-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
           
//将生成的連結檔案(.lib/linux-atomic.a等)打包到本地目錄  
//檔案格式 :ELF 32-bit LSB relocatable, ARM
tar czvf lib.tar.gz  .libs/
//還原平台編譯器的AR和Randlib 軟連結
$sudo rm /usr/bin/ar && sudo ln -s/usr/bin/x86_64-linux-gnu-ar /usr/bin/ar
$sudo rm /usr/bin/ranlib && sudo ln -s /usr/bin/x86_64-linux-gnu-ranlib  /usr/bin/ranlib
           

(c)重新編寫編譯腳本

#!/bin/bash
 
AR="ar"
RANLIB="ranlib"
CC="gcc"

libtool --tag=CC --mode=compile gcc  -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c 

libtool --tag=CC --mode=link g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
           
//庫檔案檔案格式 :ELF 64-bit LSB relocatable, x86-64
cd qt-everywhere-opensource-src-4.8.6
./configure --prefix=/opt/Qt4.8.6-hi3520 -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -embedded arm -platform linux-g++ -xplatform qws/linux-3520d-g++  -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -nomake toomakels  -llinux-atomic -L/home/vmuser/src/gcc-4.6.0/gcc/config/arm/.libs
           

(d)通過configure 配置之後,把之前制作的atomic庫解包再進行make編譯

tar zxvf lib.tar.gz
cd qt-everywhere-opensource-src-4.8.6
make -j4
make install
           

[附件]:

gcc-4.6.0源碼:

https://download.csdn.net/download/u011539437/12517988

gcc-4.6.0修改後的源碼:

https://download.csdn.net/download/u011539437/12531865

qt-4.8.6修改後的源碼:

https://download.csdn.net/download/u011539437/12531903

qt-4.8.6編譯好的安裝檔案包:

https://download.csdn.net/download/u011539437/12532427

繼續閱讀