QT4.8.7在海思Hi3559上的移植

1. 下载QT源码包,地址为:

http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz

2. 将源码包保存在自行设置的路径(笔者的路径为~/QT),进入此路径:

cd ~/QT

3. 解压源码包:

tar -xzvf qt-everywhere-opensource-src-4.8.7.tar.gz  -C ./

4. 交叉编译

1) 进入qt-everywhere-opensource-src-4.8.7/mkspecs/qws目录,新建linux-hi3559-g++目录,复制linux-arm-g++目录下的所有文件到linux-hi3559-g++:

cd qt-everywhere-opensource-src-4.8.7/mkspecs/qws/

mkdir -p linux-hi3559-g++

cp –a linux-arm-g++/* linux-hi3559-g++

2)进入linux-hi3559-g++,修改文件qmake.conf:

vi linux-hi3559-g++/qmake.conf

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-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文件内容如下:

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

# modifications to linux.conf
QMAKE_AR                = aarch64-himix100-linux-ar cqs
QMAKE_OBJCOPY           = aarch64-himix100-linux-objcopy
QMAKE_STRIP             = aarch64-himix100-linux-strip

load(qt_config)

 3) 安装X11库:

sudo apt-get install libX11-dev libXext-dev libXtst-dev

4) 返回源码目录qt-everywhere-opensource-src-4.8.7进行配置:

cd ../../

sudo mkdir /usr/local/Qt4.8.7

./configure --prefix=/usr/local/Qt4.8.7-opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-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-hi3559-g++ -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -nomake tools

其中:  --prefix=/usr/local/Qt4.8.7  为交叉编译目标安装目录

            -xplatform qws/linux-hi3559-g++指定编译器及平台配置信息

这一步完成后,如果正确,结果如下所示:

 ……
  for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/WebKit/qt/docs/webkitsnippets/webpage/webpage.pro
  for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/phonon/phonon.pro
  for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/opengl/util/generator.pro
  for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/opengl/util/meego/shader-cache-introspector.pro

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/local/Qt4.8.7

To reconfigure, run 'make confclean' and 'configure'.

5) make,进行编译。

出现以下错误:

……

{standard input}:3950: 错误: operand mismatch -- `swpb x0,x20,[x19]'
{standard input}:3950: Info:    did you mean this?
{standard input}:3950: Info:        swpb w0, w20, [x19]
{standard input}:3964: 错误: operand mismatch -- `swpb x0,x1,[x23]'
{standard input}:3964: Info:    did you mean this?
{standard input}:3964: Info:        swpb w0, w1, [x23]
make[1]: *** [.obj/release-shared-emb-arm/qabstractanimation.o] 错误 1
make[1]:正在离开目录 `/home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/corelib'

make: *** [sub-corelib-make_default-ordered] 错误 2
 

解决方法如下:

修改~/QT/qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_armv5.h

vi ~/QT/qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_armv5.h,找到125行附近,如下所示修改:

inline char q_atomic_swp(volatile char *ptr, char newval)
{
    register char ret;
    /* asm volatile("swpb %0,%2,[%3]"
                 : "=&r"(ret), "=m" (*ptr)
                 : "r"(newval), "r"(ptr)
                 : "cc", "memory");
    */

    ret = *ptr;
    *ptr = newval;

    return ret;
}

保存退出。之后再次运行make,进行编译。

出现以下错误:

解决方法如下:

修改~/QT/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp

vi ~/QT/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp, 找到125行附近,如下所示修改:

bool QAccessibleTable2::unselectColumn(int column)
{
    if (!view()->model() || !view()->selectionModel())
        return false;
    QModelIndex index = view()->model()->index(0, column, view()->rootIndex());
    if (!index.isValid() || view()->selectionMode() & QAbstractItemView::NoSelection)
        return false;
    //view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect);
    view()->selectionModel()->select(index, QItemSelectionModel::SelectionFlags(QItemSelectionModel::Columns & QItemSelectionModel::Deselect));
     
    return true;
}

再次执行make,编译。这次可以成功完成了,如下图所示:

6)安装。

sudo make install

5. 测试是否编译安装成功。

执行 qmake -v 命令,出现以下错误:

qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory

解决方法:

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/105932992