• 7473阅读
  • 4回复

[原创]Qt5.3移植过程 [复制链接]

上一主题 下一主题
离线smaller
 

只看楼主 倒序阅读 楼主  发表于: 2016-03-09
Q5.3编译移植
移植参考了很多blog的教程,但是编译很不顺利。
先说下开发环境:Ubuntu 12.04.3 LTS \n \l
arm-linux-gcc:
arm-none-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm-2011.09/bin/../libexec/gcc/arm-none-linux-gnueabi/4.6.1/lto-wrapper
Target: arm-none-linux-gnueabi
Configuredwith:/scratch/jwlemke/2011.09-arm-linux-eabi-lite/src/gcc-4.6-2011.09/configure--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu--target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap--disable-libssp --disable-libstdcxx-pch--enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as--with-gnu-ld --with-specs='%{save-temps: -fverbose-asm}%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}-D__CS_SOURCERYGXX_MAJ__=2011 -D__CS_SOURCERYGXX_MIN__=9-D__CS_SOURCERYGXX_REV__=70 %{O2:%{!fno-remove-local-statics:-fremove-local-statics}}%{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics:-fremove-local-statics}}}' --enable-languages=c,c++ --enable-shared--enable-lto --enable-symvers=gnu --enable-__cxa_atexit--with-pkgversion='Sourcery CodeBench Lite 2011.09-70'--with-bugurl=https://support.codesourcery.com/GNUToolchain/--disable-nls --prefix=/opt/codesourcery--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc--with-build-sysroot=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/install/arm-none-linux-gnueabi/libc--with-gmp=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-mpfr=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-mpc=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-ppl=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic-lm'--with-cloog=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-libelf=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--disable-libgomp --enable-poison-system-directories--with-build-time-tools=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/install/arm-none-linux-gnueabi/bin--with-build-time-tools=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.6.1 (Sourcery CodeBench Lite 2011.09-70)
pc环境gcc:
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
目标:i686-linux-gnu
配置为:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
线程模型:posix
gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
需要编译安装
Qt creat:
qt-creator-opensource-linux-x86-3.2.0-rc1.run
Qt  SDK:
qt-opensource-linux-x86-5.3.0-RC.run
Qt 5.3源码:
qt-everywhere-opensource-src-5.3.0-RC.tar.gz
tslib1.4源码:
tslib-1.4.tar.bz2
libiconv-1.1.4源码:
libiconv-1.1.4..tar.gz
一下是具体操作(请尽量在root下操作)


一. 安装编译环境需要的依赖

    apt-get install vim  
    apt-get install libtool autoconf automake git gawk

如果编译中有一下错误,请安装对应的包。
(1)
The test for linking against libxcb and support libraries failed!  You might need to install dependency packages, or pass -qt-xcb.  See src/plugins/platforms/xcb/README.

apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev  libxcb-sync0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev

(2)
Warning: Disabling Linux Accessibility Bridge: DBus is missing.
apt-get install dbus-*dev
(3)
No package 'libpci' found
apt-get install libnss3-dev libgconf2-dev libgtk2.0-dev libpci-dev libudev-dev libpulse-dev libc6-dev:i386 build-essential gcc-multilib g++-multilib gperf
ERROR sys\capability.h  apt-get install libcap
apt-get install texinfo gawk bison flex
(4)
error: alsa/asoundlib.h: 没有那个文件或目录
apt-get install libasound2-dev
(5)
error: cannot find -lcrypto
collect2: error: ld returned 1 exit status
用新立德搜索为安装的包  搜索“libcrypto”
按后标记 libssl-dev libssl1.0.0 以及 1.0.0libssl-deb
(6)
无法输入中文(同上新利德或者直接apt-get install):
fcitx-libs-qt5 fcitx-libs-qt5-dbg fcitx-libs-qt5-dev


二. tslib1.4移植 与 libiconv-1.1.4移植
(1)获取源码:
    git clone https://github.com/kergoth/tslib
或者tslib-1.4.tar.bz2 解压;
(2)源码编译:
    export CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++
    ./autogen.sh
    echo "ac_cv_func_malloc_0_nonnull=yes" > cache-file.cache
    ./configure --host=arm-none-linux-gnueabi --cache-file=cache-file.cache --prefix=/Qt_install/tslib

    make
    make install
(3)tslib移植
    进入安装目录:/Qt_install/tslib
    1.修改etc/ts.config
    module_raw input
    2.将tslib目录拷贝到开发板/usr/local/下
    3.开发板环境配置
    修改/etc/profile文件
    export HOME=/root
    export TSLIB_ROOT=/usr/local/tslib
    export TSLIB_TSDEVICE=/dev/event1
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
    export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
    export TSLIB_ts_bin=/usr/local/tslib/bin
    export TSLIB_FBDEVICE=/dev/fb0
    export TSLIB_CONSOLEDEVICE=none

    export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
然后运行/usr/local/tslib/下的校准程序或者测试程序即可。
ts_calibrate  ts_harvest    ts_print      ts_print_raw  ts_test

(4)libiconv-1.1.4编译与移植
1.    ./configure -prefix=/Qt_install/libicon-1.14 -host=arm-none-linux-gnueabi
    make
    make intsll
2.复制安装目录/Qt_install/libicon-1.14/lib/preloadable_libiconv.so文件到开发板/lib目录即可


备注:CC和CXX可以改成自己的编译器比如:CC=arm-linux-gcc  CXX=arm-linux-g++
    --prefix=/tslib安装目录    --host=arm-linux
错误提示:
(1)
./ts_calibrate
No raw modules loaded.
ts_config: No such file or directory

修改:
tslib安装目录etc/ts.config :
module_raw input
其他不变;
(2)
./ts_calibrate
xres = 480, yres = 272
tslib: Selected device uses a different version of the event protocol than tslib was compiled for
^Csignal 2 caught
修改:
arm-none-linux-gcc-gnueabi中的头文件:
/opt/arm-2011.09/arm-none-linux-gnueabi/libc/usr/include/linux/input.h
修改版本号
//bk 原来的  0x010001改成0x0x0000
//#define EV_VERSION            0x010001
//new   tslib version error
#define EV_VERSION              0x010000
/*
或者修改内核中 include/linux/input.h 修改同上。

三.Qt5.3移植
(1)Qt源码解压:
tar -xvf qt-everywhere-opensource-src-5.3.0-RC.tar.gz
(2)配置
1.修改
qtbase/mkspecs/linux-arm-gnueabi-g++目录下的qmake.conf
cd /work/Qt/arm/qtbase/mkspecs/linux-arm-gnueabi-g++
gedit  qmake.conf
#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

//添加的内容
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE   +=-O2 -march=armv5te
QMAKE_CXXFLAGS_RELEASE +=-O2 -march=armv5te

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

//添加的内容
QMAKE_INCDIR += /work/Qt_install/tslib/include  
QMAKE_LIBDIR += /work/Qt_install/tslib/lib

# modifications to g++.conf
QMAKE_CC                = arm-none-linux-gnueabi-gcc
QMAKE_CXX               = arm-none-linux-gnueabi-g++
QMAKE_LINK              = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy
QMAKE_NM                = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP             = arm-none-linux-gnueabi-strip
load(qt_config)

2.修改文件qtdeclarative/src/src.pro文件的第18行
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += \
    qml

qtHaveModule(gui):contains(QT_CONFIG, opengl(es1|es2)?) {
    SUBDIRS += \
        quick \
        qmltest \
        particles
}

SUBDIRS += \
    plugins \
    imports \
    qmldevtools

qtHaveModule(quick):qtHaveModule(widgets): SUBDIRS += quickwidgets

qmldevtools.CONFIG = host_build

3.创建autoconfig.sh
./configure -prefix /Qt_install/arm -confirm-license -release -opensource -shared -make libs -xplatform linux-arm-gnueabi-g++ -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -no-opengl -no-sse2 -no-openssl -no-nis -no-cups -no-glib -no-iconv -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -nomake examples -nomake tools -no-c++11 -qt-libpng -qt-freetype -qreal float -I/work/Qt_install/tslib/include -L/work/Qt_install/tslib/lib

保存后,chmod a+x autoconfig.sh
./autoconfig.sh 运行
也可直接使用不写入autoconfig.sh
中间提示:
Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition.
输入 “o”
Type '3' to view the GNU General Public License version 3.
Type 'L' to view the Lesser GNU General Public License version 2.1.
Type 'yes' to accept this license offer.
Type 'no' to decline this license offer.

Do you accept the terms of either license?
输入“yes”

make: g++:命令未找到
make: *** [project.o] 错误 127
方法:sudo apt-get install g++

(4) Qt编译与移植
1.编译
    make
    make install
2.移植到arm开发板
    如果编译没有出错,进行一下操作:
安装后的arm目录:/Qt_install/arm/中的文件
复制到开发板:/usr/local/Qt-5.3
3.修改开发板环境变量:
/etc/profile

export QTDIR=/usr/local/Qt-5.3
export LD_LIBRARY_PATH=/usr/local/Qt-5.3/lib:$LD_LIBRARY_PATH:/lib
export POINTERCAL_FILE=/etc/pointercal
export QT_QPA_FONTDIR=/usr/local/Qt-5.3/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/local/Qt-5.3/plugins
export QT_QPA_EGLFS_FB=/dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0,size=480x272,tty=/dev/tty0
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/event1
export LD_PRELOAD=/lib/preloadable_libiconv.so:/usr/local/Qt-5.3/plugins/generic/libqtslibplugin.so:/usr/local/Qt-5.3/plugins/generic/libqevdevtouchplugin.so:/usr/local/Qt-5.3/plugins/generic/libqevdevmouseplugin.so:/lib/libts.so
export PATH=$QTDIR/bin:$PATH

移植tslib以及Qt以后/etc/profile文件配置如下:
echo "Welcome to Linux"

export QTDIR=/usr/local/Qt-5.3
export LD_LIBRARY_PATH=/usr/local/Qt-5.3/lib:$LD_LIBRARY_PATH:/lib
export POINTERCAL_FILE=/etc/pointercal
export QT_QPA_FONTDIR=/usr/local/Qt-5.3/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/local/Qt-5.3/plugins
export QT_QPA_EGLFS_FB=/dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0,size=480x272,tty=/dev/tty0
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/event1
export LD_PRELOAD=/lib/preloadable_libiconv.so:/usr/local/Qt-5.3/plugins/generic/libqtslibplugin.so:/usr/local/Qt-5.3/plugins/generic/libqevdevtouchplugin.so:/usr/local/Qt-5.3/plugins/generic/libqevdevmouseplugin.so:/lib/libts.so
export PATH=$QTDIR/bin:$PATH

export HOME=/root
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_ts_bin=/usr/local/tslib/bin
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none

export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

(5)Qt creat 以及Qt SD安装
1.Qt creat在终端中运行
sudo qt-creator-opensource-linux-x86-3.3.0-rc1.run
2.Qt SDK
sudo qt-opensource-linux-x86-5.3.0-RC.run

3.配置
    打开Qt---》工具---》  选项---》构建和运行
    (1)编译器
    找不到的话 手动添加自己的安装路径,pc gcc和arm-linux-gcc
    (2)Qt Version
    手动添加安装的Qt SDK和自己编译出来的arm版本
    (3)构建套件
    手动添加arm-linux 设备类型:桌面  编译器选 arm-linux-gcc
    Qt版本选Qt5.3(arm)
    (4)文本编辑器
        显示---》开启文字折行
        行为---》编码utf-8
完。
这个过程我这边测试没什么问题,如果有错误或者不对的地方欢迎指正,我也是新手,大家共同学习。
编译配置的时候加 -v配置过程很多错误,去掉就不显示了。具体原因还不清楚,有知道的希望告知一下。
参考文档:
http://blog.csdn.net/woshidahuaidan2011/article/details/43604059


离线smaller

只看该作者 1楼 发表于: 2016-03-09
关于安装路径 自行设置,编译移植不要直接 复制粘贴,请手动输入。
注释:
打印问题:
//qDebug() << "QTsLibMouseHandler" << key << specification;
注释掉qtbase/src/plugins/generic/tslib/qtslib.cpp 62行;
离线zhangtao

只看该作者 2楼 发表于: 2016-05-31
你编译的arm版5.3 make install以后有字体库吗?  我的怎么没有
离线smaller

只看该作者 3楼 发表于: 2016-06-14
回 zhangtao 的帖子
zhangtao:你编译的arm版5.3 make install以后有字体库吗?  我的怎么没有 (2016-05-31 22:50) 

移植到arm上需要自己复制过去一个字库,我用的是温泉驿的字库.
离线smaller

只看该作者 4楼 发表于: 2017-03-25
+  -v参数出现错误提示主要是由于中间有些功能需要类似的库支持 我举个例子说下
db2.cpp:42:20: error: sqlcli.h: No such file or directory
db2.cpp:43:21: error: sqlcli1.h: No such file or directory
make: *** [db2.o] 错误 1
DB2 disabled.

这个就是由于没指定DB2的函数库的头导致的 配置的时候找不到DB2的头报错,如果你需要这个DB2(好像是数据库) 你需要(linux)安装DB2相关的dev这个错误就会去掉。其他的都是类似问题。
快速回复
限100 字节
 
上一个 下一个