• linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本 以及x64上编译qt


    最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用.

    考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作.

     

    本文参考:

    Qt移植到ARM Linux教程:http://www.veryarm.com/930.html

    成功移植qt软键盘和输入法到arm开发板的qt程序中:http://www.csdn1 2 3.com/html/mycsdn20140110/d1/d1ecf8c322c9447b049f2a71d12f5e87.html

    请把上面1 2 3 换成123

     

    关于鼠标不能通用 .

    http://blog.chinaunix.net/uid-22666248-id-226373.html

    http://wenku.baidu.com/link?url=xmdOvKLdA8W91VQqlNSyYmAw6PsKc6jV5w2mVh6y6lqSgiXbTztGx1P8ewMOAX8vF3JxOGNXseSBRjlQB3N7eBJtfZXYqv7F5vroZwr7TsO

    目录:

    1. 前言

    2. 下载tslib和qt

    3. openssl 安装低版本 (1.0.2),如果安装openssl 1.1.0,会出错.
    4. 交叉编译器机所在linux的环境准备

    5. 编译tslib

    6. 编译安装qt

    7. 移植到Embedded arm

    8. 单独对qt-everywhere-opensource-src-4.8.6demosrowser 的编译.

     

    存在问题鼠标不能操作(后面发现鼠标存在,只是颜色透明,且移动飞快...),键盘 没有中文输入法 .后续待解决

     

    1,前言

    引用

    Qt 4.8.6 X11、embeded x86(qvfb运行 )、embeded arm各个版本编译总结

    的话:

    QT是跨平台C++图形用户界面应用程序开发框架,可以实现一套源码,多个平台编译运行。可视为平台无关的开发环境。
    
    QT源码可以被编译成很多个版本,这里介绍3个版本:linux桌面版(X11),embeded x86版,embeded arm版。编译后生成对应平台库文件,使用某平台的编译器编译应用程序时就会链接对应平台的库文件,这样应用程序就能在该平台下运行。
    
    1、X11版(默认版本)
    X11版本的QT可以在使用X windows系统的linux 桌面操作系统上运行(我用的是Ubuntu),如果不需要开发桌面应用程序,可以不编译。
    
    2、Embeded x86版
    这个版本为什么是嵌入版(Embeded)的,因为x86台式机本身也可以当做一个嵌入式系统,但是Embeded x86版的QT不能直接通过X11窗口系统输出画面,这时我们可以借助X11的qvfb工具仿真一个LCD输出设备(QWS环境),这样Embeded x86应用程序就能在Ubuntu里仿真运行了。要理解这点其实很简单,以Ubuntu为例,Ubuntu的应用程序是以X11协议(X窗口系统)输送到屏幕显示界面的,X server负责图形显示,应用程序负责计算、修改数据,两者基于某种协议通信。对于嵌入式linux,qt应用程序也需要一个窗口系统才能显示,但是嵌入式linux系统不能使用X11(太耗资源了),奇趣公司就专门开发了一个qws(QT windows system), 应用程序按照协议向qws发送数据,服务端负责显示数据。现在,qvfb就是QWS的显示设备。
    另外请注意,Embeded x86版的QT应用程序是不能在arm开发板上运行的。
    embeded x86版并不是我们的开发板最终使用的QT库,编译这个版本只是为了方便我们调试, 先在ubuntu中仿真运行,看看界面,不必下载到开发板的文件系统中运行,两者的运行效果除了界面基本相同,其他方面还是有差异的。
    
    3、Embeded arm版
    这个版本才是我们在arm开发板上运行的版本。
    
    我们做嵌入式开发,其实只需编译第3版本的QT(Embeded arm版),编译X11 版本的目的只是方便我个人学习QT,编译Embeded x86只是为了体验仿真效果。

      

    但是嵌入式linux系统不能使用X11(太耗资源了),奇趣公司就专门开发了一个qws(QT windows system), 应用程序按照协议向qws发送数据,服务端负责显示数据。现在,qvfb就是QWS的显示设备。

     

    所以后面才有了 ./qtwebkitdemo  -qws  的方式运行.

       

    2,下载tslib和qt

      Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。

      在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。

      到 github 下载 tslib最新版,地址:https://github.com/kergoth/tslib,下载后文件名为:tslib-master.zip。

      到 Qt 官网下载合适的 Qt 版本,地址:http://download.qt-project.org/archive/qt/。本教程以 4.8.6为例,下载的压缩包名称为: qt-everywhere-opensource-src-4.8.6.tar.gz。

       

      之所以用qt 4.8.6这个稳定版本是因为 用qt  5.5.0 会报

    pragma GCC diagnostic 这个错.

      后面发现是gcc 版本低于4.6 .

      

    ../../include/QtBluetooth/../../src/bluetooth/qbluetoothdevicediscoveryagent.h:49:16: warning: expected [error|warning|ignored] after '#pragma GCC diagnostic'

    qbluetoothuuid.cpp:590:1: error: #pragma GCC diagnostic not allowed inside functions
    qbluetoothuuid.cpp:591:1: error: #pragma GCC diagnostic not allowed inside functions
    qbluetoothuuid.cpp:592:79: warning: dereferencing type-punned pointer will break strict-aliasing rules
    qbluetoothuuid.cpp:593:79: warning: dereferencing type-punned pointer will break strict-aliasing rules
    qbluetoothuuid.cpp:594:79: warning: dereferencing type-punned pointer will break strict-aliasing rules
    qbluetoothuuid.cpp:595:1: error: #pragma GCC diagnostic not allowed inside functions

     

     

      

    3,openssl 安装低版本 (1.0.2),如果安装openssl 1.1.0 ,会出错.

    https://github.com/Ultimaker/cura-build/issues/105

    安装openssl1.1.0版本会报,

    /usr/include/openssl/ossl_typ.h:119:16: note: forward declaration of ‘X509 {aka struct x509_st}’
     typedef struct x509_st X509;


    的错( invalid use of incomplete type  x509)

    4,交叉编译器机所在linux的环境准备

     

    sudo apt-get install automake autoconf libtool m4
    sudo apt-get install libX11-dev libXext-dev libXtst-dev libXrender-dev 

      

      安装交叉编译器

      本文全用 arm-linux-g++ v4.5.1 

      安装方法,参考:

      arm-linux-gcc-4.5.1的安装方法:http://blog.sina.com.cn/s/blog_68f3489201014a86.html

      Ubuntu 13.4 安装Arm-linux-gcc 详细过程:http://lieyan.lofter.com/post/225d54_afc506

     

    root@debian:/disk2# arm-linux-gcc -v
    Using built-in specs.
    COLLECT_GCC=arm-linux-gcc
    COLLECT_LTO_WRAPPER=/usr/arm-linux-g++_4.5.1/4.5.1/bin/../libexec/gcc/arm-none-linux-gnueabi/4.5.1/lto-wrapper
    Target: arm-none-linux-gnueabi
    Configured with: /work/toolchain/build/src/gcc-4.5.1/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.5.1 --with-sysroot=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root --enable-languages=c,c++ --disable-multilib --with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=softfp --with-pkgversion=ctng-1.8.1-FA --with-bugurl=http://www.arm9.net/ --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-gmp=/work/toolchain/build/arm-none-linux-gnueabi/build/static --with-mpfr=/work/toolchain/build/arm-none-linux-gnueabi/build/static --with-ppl=/work/toolchain/build/arm-none-linux-gnueabi/build/static --with-cloog=/work/toolchain/build/arm-none-linux-gnueabi/build/static --with-mpc=/work/toolchain/build/arm-none-linux-gnueabi/build/static --with-libelf=/work/toolchain/build/arm-none-linux-gnueabi/build/static --enable-threads=posix --with-local-prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long
    Thread model: posix
    gcc version 4.5.1 (ctng-1.8.1-FA) 
    root@debian:/disk2# 

      

    5, 编译tslib

      

    unzip tslib-master.zip
    cd tslib-master
    
    ./autogen.sh
    $ ./configure CC=arm-linux-gcc CXX=arm-linux-g++ --host=arm-none-linux-gnueabi --prefix=/usr/local/tslib ac_cv_func_malloc_0_nonnull=yes

    make
    sudo make install

      

    完成后,tslib会按安装到主机 /usr/local/tslib 目录下。
    进入下一步之前,先将主机中 /usr/local/tslib/etc/ts.conf 文件第二行“#module_raw input”的注释去掉,变为“module_raw input”,注意一定要顶格。

      

    6,编译安装qt

      难啃的骨头终于开始了. !!!

      

    tar xjvf qt-everywhere-opensource-src-4.8.6.tar.bz2
    cd qt-everywhere-opensource-src-4.8.6

      

      打开 qt-everywhere-opensource-src-4.8.6mkspecsqwslinux-arm-g++ 目录下的 qmake.conf (请先备份)  

      注:

      关于qws 之前一直不明所以....

      还记得文章开头的

      "

    但是嵌入式linux系统不能使用X11(太耗资源了),奇趣公司就专门开发了一个qws(QT windows system), 应用程序按照协议向qws发送数据,服务端负责显示数据。现在,qvfb就是QWS的显示设备。

    所以后面才有了 ./qtwebkitdemo  -qws  的方式运行.

    "

    所以,,恍然大W...

     

     

    原内容:

    #
    # 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 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                = /usr/arm-linux-g++_4.5.1/4.5.1/bin/arm-linux-gcc -lts
    QMAKE_CXX               = /usr/arm-linux-g++_4.5.1/4.5.1/bin/arm-linux-g++ -lts
    QMAKE_LINK              = /usr/arm-linux-g++_4.5.1/4.5.1/bin/arm-linux-g++ -lts
    QMAKE_LINK_SHLIB        = /usr/arm-linux-g++_4.5.1/4.5.1/bin/arm-linux-g++ -lts
    
    # modifications to linux.conf
    QMAKE_AR                = /usr/arm-linux-g++_4.5.1/4.5.1/bin/arm-linux-ar cqs
    QMAKE_OBJCOPY           = /usr/arm-linux-g++_4.5.1/4.5.1/bin/arm-linux-objcopy
    QMAKE_STRIP             = /usr/arm-linux-g++_4.5.1/4.5.1/bin/arm-linux-strip
    
    load(qt_config)

      为防止找不到路径,所以直接全路径了.  简单粗暴.

      再来看看

      ./configure --help

      

    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6# ./configure --help
    
    Usage:  configure [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir <dir>]
            [-docdir <dir>] [-headerdir <dir>] [-plugindir <dir> ] [-importdir <dir>] [-datadir <dir>]
            [-translationdir <dir>] [-sysconfdir <dir>] [-examplesdir <dir>]
            [-demosdir <dir>] [-buildkey <key>] [-release] [-debug]
            [-debug-and-release] [-developer-build] [-shared] [-static] [-no-fast] [-fast] [-no-largefile]
            [-largefile] [-no-exceptions] [-exceptions] [-no-accessibility]
            [-accessibility] [-no-stl] [-stl] [-no-sql-<driver>] [-sql-<driver>]
            [-plugin-sql-<driver>] [-system-sqlite] [-no-qt3support] [-qt3support]
            [-platform] [-D <string>] [-I <string>] [-L <string>] [-help]
            [-qt-zlib] [-system-zlib] [-no-gif] [-no-libtiff] [-qt-libtiff] [-system-libtiff]
            [-no-libpng] [-qt-libpng] [-system-libpng] [-no-libmng] [-qt-libmng]
            [-system-libmng] [-no-libjpeg] [-qt-libjpeg] [-system-libjpeg] [-make <part>]
            [-nomake <part>] [-R <string>]  [-l <string>] [-no-rpath]  [-rpath] [-continue]
            [-verbose] [-v] [-silent] [-no-nis] [-nis] [-no-cups] [-cups] [-no-iconv]
            [-iconv] [-no-pch] [-pch] [-no-dbus] [-dbus] [-dbus-linked] [-no-gui]
            [-no-separate-debug-info] [-no-mmx] [-no-3dnow] [-no-sse] [-no-sse2]
            [-no-sse3] [-no-ssse3] [-no-sse4.1] [-no-sse4.2] [-no-avx] [-no-neon]
            [-qtnamespace <namespace>] [-qtlibinfix <infix>] [-separate-debug-info] [-armfpa]
            [-no-optimized-qmake] [-optimized-qmake] [-no-xmlpatterns] [-xmlpatterns]
            [-no-multimedia] [-multimedia] [-no-phonon] [-phonon] [-no-phonon-backend] [-phonon-backend]
            [-no-media-backend] [-media-backend] [-no-audio-backend] [-audio-backend]
            [-no-openssl] [-openssl] [-openssl-linked]
            [-no-gtkstyle] [-gtkstyle] [-no-svg] [-svg] [-no-webkit] [-webkit] [-webkit-debug]
            [-no-javascript-jit] [-javascript-jit]
            [-no-script] [-script] [-no-scripttools] [-scripttools]
            [-no-declarative] [-declarative] [-no-declarative-debug] [-declarative-debug]
            [additional platform specific options (see below)]


    Installation options:

        -qpa [name] ......... This will enable the QPA build.
                              QPA is a window system agnostic implementation of Qt.
                              If [name] is given, sets the default QPA platform (e.g xcb, cocoa).

     These are optional, but you may specify install directories.

        -prefix <dir> ...... This will install everything relative to <dir>
                             (default /usr/local/Trolltech/QtEmbedded-4.8.6)

        -hostprefix [dir] .. Tools and libraries needed when developing
                             applications are installed in [dir]. If [dir] is
                             not given, the current build directory will be used.

      * -prefix-install .... Force a sandboxed "local" installation of
                             Qt. This will install into
                             /usr/local/Trolltech/QtEmbedded-4.8.6, if this option is
                             disabled then some platforms will attempt a
                             "system" install by placing default values
                             in a system location other than PREFIX.

     You may use these to separate different parts of the install:

        -bindir <dir> ......... Executables will be installed to <dir>
                                (default PREFIX/bin)
        -libdir <dir> ......... Libraries will be installed to <dir>
                                (default PREFIX/lib)
        -docdir <dir> ......... Documentation will be installed to <dir>
                                (default PREFIX/doc)
        -headerdir <dir> ...... Headers will be installed to <dir>
                                (default PREFIX/include)
        -plugindir <dir> ...... Plugins will be installed to <dir>
                                (default PREFIX/plugins)
        -importdir <dir> ...... Imports for QML will be installed to <dir>
                                (default PREFIX/imports)
        -datadir <dir> ........ Data used by Qt programs will be installed to <dir>
                                (default PREFIX)
        -translationdir <dir> . Translations of Qt programs will be installed to <dir>
                                (default PREFIX/translations)
        -sysconfdir <dir> ..... Settings used by Qt programs will be looked for in <dir>
                                (default PREFIX/etc/settings)
        -examplesdir <dir> .... Examples will be installed to <dir>
                                (default PREFIX/examples)
        -demosdir <dir> ....... Demos will be installed to <dir>
                                (default PREFIX/demos)

     You may use these options to turn on strict plugin loading.

        -buildkey <key> .... Build the Qt library and plugins using the specified
                             <key>.  When the library loads plugins, it will only
                             load those that have a matching key.

    Configure options:

     The defaults (*) are usually acceptable. A plus (+) denotes a default value
     that needs to be evaluated. If the evaluation succeeds, the feature is
     included. Here is a short explanation of each option:

     *  -release ........... Compile and link Qt with debugging turned off.
        -debug ............. Compile and link Qt with debugging turned on.
        -debug-and-release . Compile and link two versions of Qt, with and without
                             debugging turned on (Mac only).

        -developer-build ... Compile and link Qt with Qt developer options (including auto-tests exporting)

        -opensource ........ Compile and link the Open-Source Edition of Qt.
        -commercial ........ Compile and link the Commercial Edition of Qt.


     *  -shared ............ Create and use shared Qt libraries.
        -static ............ Create and use static Qt libraries.

     *  -no-fast ........... Configure Qt normally by generating Makefiles for all
                             project files.
        -fast .............. Configure Qt quickly by generating Makefiles only for
                             library and subdirectory targets.  All other Makefiles
                             are created as wrappers, which will in turn run qmake.

        -no-largefile ...... Disables large file support.
     +  -largefile ......... Enables Qt to access files larger than 4 GB.

     *  -no-system-proxies . Do not use system network proxies by default.
        -system-proxies .... Use system network proxies by default.

     *  -no-exceptions ..... Disable exceptions on compilers that support it.
        -exceptions ........ Enable exceptions on compilers that support it.

        -no-accessibility .. Do not compile Accessibility support.
     *  -accessibility ..... Compile Accessibility support.

        -no-stl ............ Do not compile STL support.
     *  -stl ............... Compile STL support.

        -no-sql-<driver> ... Disable SQL <driver> entirely.
        -qt-sql-<driver> ... Enable a SQL <driver> in the QtSql library, by default
                             none are turned on.
        -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to
                             at run time.

                             Possible values for <driver>:
                             [  db2 ibase mysql oci odbc psql sqlite sqlite2 sqlite_symbian symsql tds ]

        -system-sqlite ..... Use sqlite from the operating system.

        -no-qt3support ..... Disables the Qt 3 support functionality.
     *  -qt3support ........ Enables the Qt 3 support functionality.

        -no-xmlpatterns .... Do not build the QtXmlPatterns module.
     +  -xmlpatterns ....... Build the QtXmlPatterns module.
                             QtXmlPatterns is built if a decent C++ compiler
                             is used and exceptions are enabled.

        -no-multimedia ..... Do not build the QtMultimedia module.
     +  -multimedia ........ Build the QtMultimedia module.

        -no-audio-backend .. Do not build the platform audio backend into QtMultimedia.
     +  -audio-backend ..... Build the platform audio backend into QtMultimedia if available.

        -no-phonon ......... Do not build the Phonon module.
     +  -phonon ............ Build the Phonon module.
                             Phonon is built if a decent C++ compiler is used.
        -no-phonon-backend.. Do not build the platform phonon plugin.
     +  -phonon-backend..... Build the platform phonon plugin.

        -no-svg ............ Do not build the SVG module.
     +  -svg ............... Build the SVG module.

        -no-webkit ......... Do not build the WebKit module.
     +  -webkit ............ Build the WebKit module.
                             WebKit is built if a decent C++ compiler is used.
        -webkit-debug ...... Build the WebKit module with debug symbols.

        -no-javascript-jit . Do not build the JavaScriptCore JIT compiler.
     +  -javascript-jit .... Build the JavaScriptCore JIT compiler.

        -no-script ......... Do not build the QtScript module.
     +  -script ............ Build the QtScript module.

        -no-scripttools .... Do not build the QtScriptTools module.
     +  -scripttools ....... Build the QtScriptTools module.

        -no-declarative ..... Do not build the declarative module.
     +  -declarative ....... Build the declarative module.

        -no-declarative-debug ..... Do not build the declarative debugging support.
     +  -declarative-debug ....... Build the declarative debugging support.

        -platform target ... The operating system and compiler you are building
                             on (qws/linux-x86_64-g++).

                             See the README file for a list of supported
                             operating systems and compilers.

        -no-mmx ............ Do not compile with use of MMX instructions.
        -no-3dnow .......... Do not compile with use of 3DNOW instructions.
        -no-sse ............ Do not compile with use of SSE instructions.
        -no-sse2 ........... Do not compile with use of SSE2 instructions.
        -no-sse3 ........... Do not compile with use of SSE3 instructions.
        -no-ssse3 .......... Do not compile with use of SSSE3 instructions.
        -no-sse4.1.......... Do not compile with use of SSE4.1 instructions.
        -no-sse4.2.......... Do not compile with use of SSE4.2 instructions.
        -no-avx ............ Do not compile with use of AVX instructions.
        -no-neon ........... Do not compile with use of NEON instructions.

        -qtnamespace <name>  Wraps all Qt library code in 'namespace <name> {...}'.
        -qtlibinfix <infix>  Renames all libQt*.so to libQt*<infix>.so.

        -D <string> ........ Add an explicit define to the preprocessor.
        -I <string> ........ Add an explicit include path.
        -L <string> ........ Add an explicit library path.

        -help, -h .......... Display this information.

    Third Party Libraries:

        -qt-zlib ........... Use the zlib bundled with Qt.
     +  -system-zlib ....... Use zlib from the operating system.
                             See http://www.gzip.org/zlib

        -no-gif ............ Do not compile GIF reading support.

        -no-libtiff ........ Do not compile TIFF support.
        -qt-libtiff ........ Use the libtiff bundled with Qt.
     +  -system-libtiff .... Use libtiff from the operating system.
                             See http://www.libtiff.org

        -no-libpng ......... Do not compile PNG support.
        -qt-libpng ......... Use the libpng bundled with Qt.
     +  -system-libpng ..... Use libpng from the operating system.
                             See http://www.libpng.org/pub/png

        -no-libmng ......... Do not compile MNG support.
        -qt-libmng ......... Use the libmng bundled with Qt.
     +  -system-libmng ..... Use libmng from the operating system.
                             See http://www.libmng.com

        -no-libjpeg ........ Do not compile JPEG support.
        -qt-libjpeg ........ Use the libjpeg bundled with Qt.
     +  -system-libjpeg .... Use libjpeg from the operating system.
                             See http://www.ijg.org

        -no-openssl ........ Do not compile support for OpenSSL.
     +  -openssl ........... Enable run-time OpenSSL support.
        -openssl-linked .... Enabled linked OpenSSL support.

        -ptmalloc .......... Override the system memory allocator with ptmalloc.
                             (Experimental.)

    Additional options:

        -make <part> ....... Add part to the list of parts to be built at make time.
                             (libs tools examples demos docs translations)
        -nomake <part> ..... Exclude part from the list of parts to be built.

        -R <string> ........ Add an explicit runtime library path to the Qt
                             libraries.
        -l <string> ........ Add an explicit library.

        -no-rpath .......... Do not use the library install path as a runtime
                             library path.
     +  -rpath ............. Link Qt libraries and executables using the library
                             install path as a runtime library path. Equivalent
                             to -R install_libpath

        -continue .......... Continue as far as possible if an error occurs.

        -verbose, -v ....... Print verbose information about each step of the
                             configure process.

        -silent ............ Reduce the build output so that warnings and errors
                             can be seen more easily.

     *  -no-optimized-qmake ... Do not build qmake optimized.
        -optimized-qmake ...... Build qmake optimized.

        -no-gui ............ Don't build the Qt GUI library

        -no-nis ............ Do not compile NIS support.
     *  -nis ............... Compile NIS support.

        -no-cups ........... Do not compile CUPS support.
     *  -cups .............. Compile CUPS support.
                             Requires cups/cups.h and libcups.so.2.

        -no-iconv .......... Do not compile support for iconv(3).
     *  -iconv ............. Compile support for iconv(3).

        -no-pch ............ Do not use precompiled header support.
     *  -pch ............... Use precompiled header support.

        -no-dbus ........... Do not compile the QtDBus module.
     +  -dbus .............. Compile the QtDBus module and dynamically load libdbus-1.
        -dbus-linked ....... Compile the QtDBus module and link to libdbus-1.

        -reduce-relocations ..... Reduce relocations in the libraries through extra
                                  linker optimizations (Qt/X11 and Qt for Embedded Linux only;
                                  experimental; needs GNU ld >= 2.18).

     *  -no-separate-debug-info . Do not store debug information in a separate file.
        -separate-debug-info .... Strip debug information into a separate file.

    Qt for Embedded Linux:

        -embedded <arch> .... This will enable the embedded build, you must have a
                              proper license for this switch to work.
                              Example values for <arch>: arm mips x86 generic

        -xplatform target ... The target platform when cross-compiling.

        -device-option <key=value> ... Add device specific options for the device mkspec
                                       (experimental)

        -no-feature-<feature> Do not compile in <feature>.
        -feature-<feature> .. Compile in <feature>. The available features
                              are described in src/corelib/global/qfeatures.txt

        -armfpa ............. Target platform uses the ARM-FPA floating point format.
        -no-armfpa .......... Target platform does not use the ARM-FPA floating point format.

                              The floating point format is usually autodetected by configure. Use this
                              to override the detected value.

        -little-endian ...... Target platform is little endian (LSB first).
        -big-endian ......... Target platform is big endian (MSB first).

        -host-little-endian . Host platform is little endian (LSB first).
        -host-big-endian .... Host platform is big endian (MSB first).

                              You only need to specify the endianness when
                              cross-compiling, otherwise the host
                              endianness will be used.

        -no-freetype ........ Do not compile in Freetype2 support.
        -qt-freetype ........ Use the libfreetype bundled with Qt.
     *  -system-freetype .... Use libfreetype from the operating system.
                              See http://www.freetype.org/

        -qconfig local ...... Use src/corelib/global/qconfig-local.h rather than the
                              default (full).

        -no-opengl .......... Do not support OpenGL.
        -opengl <api> ....... Enable OpenGL ES support
                              With no parameter, this will attempt to auto-detect OpenGL ES 1.x
                              or 2.x, or regular desktop OpenGL.
                              Use es1 or es2 for <api> to override auto-detection.

        -depths <list> ...... Comma-separated list of supported bit-per-pixel
                              depths, from: 1, 4, 8, 12, 15, 16, 18, 24, 32 and 'all'.

        -qt-decoration-<style> ....Enable a decoration <style> in the QtGui library,
                                   by default all available decorations are on.
                                   Possible values for <style>: [ styled windows default ]
        -plugin-decoration-<style> Enable decoration <style> as a plugin to be
                                   linked to at run time.
                                   Possible values for <style>: [  default styled windows ]
        -no-decoration-<style> ....Disable decoration <style> entirely.
                                   Possible values for <style>: [ styled windows default ]

        -qt-gfx-<driver> ... Enable a graphics <driver> in the QtGui library.
                             Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen directfb qnx integrityfb ]
        -plugin-gfx-<driver> Enable graphics <driver> as a plugin to be
                             linked to at run time.
                             Possible values for <driver>: [  ahi directfb eglnullws linuxfb powervr qvfb transformed vnc ]
        -no-gfx-<driver> ... Disable graphics <driver> entirely.
                             Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen directfb qnx integrityfb ]

        -qt-kbd-<driver> ... Enable a keyboard <driver> in the QtGui library.
                             Possible values for <driver>: [ tty linuxinput qvfb qnx integrity ]

        -plugin-kbd-<driver> Enable keyboard <driver> as a plugin to be linked to
                             at runtime.
                             Possible values for <driver>: [  linuxinput ]

        -no-kbd-<driver> ... Disable keyboard <driver> entirely.
                             Possible values for <driver>: [ tty linuxinput qvfb qnx integrity ]

        -qt-mouse-<driver> ... Enable a mouse <driver> in the QtGui library.
                               Possible values for <driver>: [ pc linuxtp linuxinput tslib qvfb qnx integrity ]
        -plugin-mouse-<driver> Enable mouse <driver> as a plugin to be linked to
                               at runtime.
                               Possible values for <driver>: [  linuxtp pc tslib ]
        -no-mouse-<driver> ... Disable mouse <driver> entirely.
                               Possible values for <driver>: [ pc linuxtp linuxinput tslib qvfb qnx integrity ]

        -iwmmxt ............ Compile using the iWMMXt instruction set
                             (available on some XScale CPUs).
        -no-glib ........... Do not compile Glib support.
     +  -glib .............. Compile Glib support.


    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6#

      

      关于 -prefix  -prefix-install  如果不指定 :

      编译后在 embedded arm 中要把 lib  bin  放在  /usr/local/Trolltech/Qt-4.8.6 这个目录下,不存在就需要创建

      

    -prefix <dir> ...... This will install everything relative to <dir>
    (default /usr/local/Trolltech/Qt-4.8.6)

    * -prefix-install .... Force a sandboxed "local" installation of
    Qt. This will install into
    /usr/local/Trolltech/Qt-4.8.6, if this option is
    disabled then some platforms will attempt a
    "system" install by placing default values
    in a system location other than PREFIX.

      

      我的./configure

    -I后面指定上一步tslib的include路径,-L后面指定上一步tslib的lib路径,

    ./configure  -opensource -release -shared -Declarative -importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions  -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg -webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg  -make libs -make tools -make examples -make demos  -make translations -nomake docs -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths  16,24,32 -qt-gfx-linuxfb   -armfpa   -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch -I/usr/local/tslib/include -L/usr/local/tslib/lib -confirm-license  

       这儿要改为:

      

    ./configure  -opensource -release -shared -Declarative -importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions  -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg -webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg  -make libs -make tools -make examples -make demos  -make translations -nomake docs -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths all -qt-gfx-linuxfb   -armfpa   -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch -I/usr/local/tslib/include -L/usr/local/tslib/lib -confirm-license  

      这儿的重要参数就是,其实都是重要参数. 这个需要看的比较多.

      需要编译webkit,demos 因为demos 包含了我们需要的browser示例.

      如果出现以下错误,则是 mkspecs/qws/linux-arm-g++/qmake.conf 中编译器没找到路径,所以用全路径啊.:

      

    The tslib functionality test failed!
    You might need to modify the include and library search paths by editing
    QMAKE_INCDIR and QMAKE_LIBDIR in
    qt-everywhere-opensource-src-4.8.6/mkspecs/qws/linux-arm-g++.

      编译安装:

      

    make 
    
    
    make install

      这儿是漫长的,差不多要5个小时.

      make完成后.

      打包 exe和 lib .本文直接 把 qt-everywhere-opensource-src-4.8.6demosrowserrowser 这个exe放在lib目录下,方便 embedded arm 下使用.

    注意 lib下的 所有都有拷贝走,包含 ./lib/fonts  这个字体目录.程序需要.

     

    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6# ls -l lib
    total 80204
    -rw-r--r-- 1 root root   711791 Aug 23 05:56 browser
    drwxr-xr-x 2 1001 1001     4096 Apr 10  2014 fonts
    -rw-r--r-- 1 root root      521 Aug 22 13:10 libpvrQWSWSEGL.prl
    -rw-r--r-- 1 root root      788 Aug 22 13:10 libQAxContainer.prl
    -rw-r--r-- 1 root root      755 Aug 22 13:10 libQAxServer.prl
    -rw-r--r-- 1 root root      899 Aug 25 20:07 libQt3Support.la
    -rw-r--r-- 1 root root      863 Aug 25 20:07 libQt3Support.prl
    lrwxrwxrwx 1 root root       22 Aug 25 03:33 libQt3Support.so -> libQt3Support.so.4.8.6
    lrwxrwxrwx 1 root root       22 Aug 25 03:33 libQt3Support.so.4 -> libQt3Support.so.4.8.6
    lrwxrwxrwx 1 root root       22 Aug 25 03:33 libQt3Support.so.4.8 -> libQt3Support.so.4.8.6
    -rwxr-xr-x 1 root root  3364328 Aug 25 03:33 libQt3Support.so.4.8.6
    -rw-r--r-- 1 root root      868 Aug 25 20:08 libQtCLucene.la
    -rw-r--r-- 1 root root      849 Aug 25 20:08 libQtCLucene.prl
    lrwxrwxrwx 1 root root       21 Aug 25 06:13 libQtCLucene.so -> libQtCLucene.so.4.8.6
    lrwxrwxrwx 1 root root       21 Aug 25 06:13 libQtCLucene.so.4 -> libQtCLucene.so.4.8.6
    lrwxrwxrwx 1 root root       21 Aug 25 06:13 libQtCLucene.so.4.8 -> libQtCLucene.so.4.8.6
    -rwxr-xr-x 1 root root  1541589 Aug 25 06:13 libQtCLucene.so.4.8.6
    -rw-r--r-- 1 root root      755 Aug 25 20:07 libQtCore.la
    -rw-r--r-- 1 root root      723 Aug 25 20:07 libQtCore.prl
    lrwxrwxrwx 1 root root       18 Aug 25 02:59 libQtCore.so -> libQtCore.so.4.8.6
    lrwxrwxrwx 1 root root       18 Aug 25 02:59 libQtCore.so.4 -> libQtCore.so.4.8.6
    lrwxrwxrwx 1 root root       18 Aug 25 02:59 libQtCore.so.4.8 -> libQtCore.so.4.8.6
    -rwxr-xr-x 1 root root  4026474 Aug 25 02:59 libQtCore.so.4.8.6
    -rw-r--r-- 1 root root      843 Aug 22 13:10 libQtDBus.la
    -rw-r--r-- 1 root root      821 Aug 22 13:10 libQtDBus.prl
    -rw-r--r-- 1 root root      947 Aug 25 20:07 libQtDeclarative.la
    -rw-r--r-- 1 root root      881 Aug 25 20:07 libQtDeclarative.prl
    lrwxrwxrwx 1 root root       25 Aug 25 04:04 libQtDeclarative.so -> libQtDeclarative.so.4.8.6
    lrwxrwxrwx 1 root root       25 Aug 25 04:04 libQtDeclarative.so.4 -> libQtDeclarative.so.4.8.6
    lrwxrwxrwx 1 root root       25 Aug 25 04:04 libQtDeclarative.so.4.8 -> libQtDeclarative.so.4.8.6
    -rwxr-xr-x 1 root root  4694510 Aug 25 04:04 libQtDeclarative.so.4.8.6
    -rw-r--r-- 1 root root      604 Aug 25 20:08 libQtDesignerComponents.prl
    lrwxrwxrwx 1 root root       32 Aug 25 06:34 libQtDesignerComponents.so -> libQtDesignerComponents.so.4.8.6
    lrwxrwxrwx 1 root root       32 Aug 25 06:34 libQtDesignerComponents.so.4 -> libQtDesignerComponents.so.4.8.6
    lrwxrwxrwx 1 root root       32 Aug 25 06:34 libQtDesignerComponents.so.4.8 -> libQtDesignerComponents.so.4.8.6
    -rwxr-xr-x 1 root root  3491318 Aug 25 06:34 libQtDesignerComponents.so.4.8.6
    -rw-r--r-- 1 root root      548 Aug 25 20:08 libQtDesigner.prl
    lrwxrwxrwx 1 root root       22 Aug 25 06:27 libQtDesigner.so -> libQtDesigner.so.4.8.6
    lrwxrwxrwx 1 root root       22 Aug 25 06:27 libQtDesigner.so.4 -> libQtDesigner.so.4.8.6
    lrwxrwxrwx 1 root root       22 Aug 25 06:27 libQtDesigner.so.4.8 -> libQtDesigner.so.4.8.6
    -rwxr-xr-x 1 root root  6113245 Aug 25 06:27 libQtDesigner.so.4.8.6
    -rw-r--r-- 1 root root      840 Aug 25 20:07 libQtGui.la
    -rw-r--r-- 1 root root      815 Aug 25 20:07 libQtGui.prl
    lrwxrwxrwx 1 root root       17 Aug 25 03:28 libQtGui.so -> libQtGui.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 03:28 libQtGui.so.4 -> libQtGui.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 03:28 libQtGui.so.4.8 -> libQtGui.so.4.8.6
    -rwxr-xr-x 1 root root 12834491 Aug 25 03:28 libQtGui.so.4.8.6
    -rw-r--r-- 1 root root      863 Aug 25 20:08 libQtHelp.la
    -rw-r--r-- 1 root root      846 Aug 25 20:08 libQtHelp.prl
    lrwxrwxrwx 1 root root       18 Aug 25 06:15 libQtHelp.so -> libQtHelp.so.4.8.6
    lrwxrwxrwx 1 root root       18 Aug 25 06:15 libQtHelp.so.4 -> libQtHelp.so.4.8.6
    lrwxrwxrwx 1 root root       18 Aug 25 06:15 libQtHelp.so.4.8 -> libQtHelp.so.4.8.6
    -rwxr-xr-x 1 root root   651089 Aug 25 06:15 libQtHelp.so.4.8.6
    -rw-r--r-- 1 root root     1013 Aug 22 13:10 libQtMeeGoGraphicsSystemHelper.la
    -rw-r--r-- 1 root root      903 Aug 22 13:10 libQtMeeGoGraphicsSystemHelper.prl
    -rw-r--r-- 1 root root      897 Aug 25 20:07 libQtMultimedia.la
    -rw-r--r-- 1 root root      835 Aug 25 20:07 libQtMultimedia.prl
    lrwxrwxrwx 1 root root       24 Aug 25 03:46 libQtMultimedia.so -> libQtMultimedia.so.4.8.6
    lrwxrwxrwx 1 root root       24 Aug 25 03:46 libQtMultimedia.so.4 -> libQtMultimedia.so.4.8.6
    lrwxrwxrwx 1 root root       24 Aug 25 03:46 libQtMultimedia.so.4.8 -> libQtMultimedia.so.4.8.6
    -rwxr-xr-x 1 root root   221760 Aug 25 03:46 libQtMultimedia.so.4.8.6
    -rw-r--r-- 1 root root      856 Aug 25 20:07 libQtNetwork.la
    -rw-r--r-- 1 root root      806 Aug 25 20:07 libQtNetwork.prl
    lrwxrwxrwx 1 root root       21 Aug 25 03:02 libQtNetwork.so -> libQtNetwork.so.4.8.6
    lrwxrwxrwx 1 root root       21 Aug 25 03:02 libQtNetwork.so.4 -> libQtNetwork.so.4.8.6
    lrwxrwxrwx 1 root root       21 Aug 25 03:02 libQtNetwork.so.4.8 -> libQtNetwork.so.4.8.6
    -rwxr-xr-x 1 root root  1606434 Aug 25 03:02 libQtNetwork.so.4.8.6
    -rw-r--r-- 1 root root      869 Aug 22 13:10 libQtOpenGL.la
    -rw-r--r-- 1 root root      824 Aug 22 13:10 libQtOpenGL.prl
    -rw-r--r-- 1 root root      869 Aug 22 13:10 libQtOpenVG.la
    -rw-r--r-- 1 root root      824 Aug 22 13:10 libQtOpenVG.prl
    -rw-r--r-- 1 root root      516 Aug 22 13:10 libQtRemote.prl
    -rw-r--r-- 1 root root      849 Aug 25 20:07 libQtScript.la
    -rw-r--r-- 1 root root      831 Aug 25 20:07 libQtScript.prl
    lrwxrwxrwx 1 root root       20 Aug 25 03:55 libQtScript.so -> libQtScript.so.4.8.6
    lrwxrwxrwx 1 root root       20 Aug 25 03:55 libQtScript.so.4 -> libQtScript.so.4.8.6
    lrwxrwxrwx 1 root root       20 Aug 25 03:55 libQtScript.so.4.8 -> libQtScript.so.4.8.6
    -rwxr-xr-x 1 root root  3052585 Aug 25 03:55 libQtScript.so.4.8.6
    -rw-r--r-- 1 root root      915 Aug 25 20:08 libQtScriptTools.la
    -rw-r--r-- 1 root root      849 Aug 25 20:08 libQtScriptTools.prl
    lrwxrwxrwx 1 root root       25 Aug 25 06:08 libQtScriptTools.so -> libQtScriptTools.so.4.8.6
    lrwxrwxrwx 1 root root       25 Aug 25 06:08 libQtScriptTools.so.4 -> libQtScriptTools.so.4.8.6
    lrwxrwxrwx 1 root root       25 Aug 25 06:08 libQtScriptTools.so.4.8 -> libQtScriptTools.so.4.8.6
    -rwxr-xr-x 1 root root   983124 Aug 25 06:08 libQtScriptTools.so.4.8.6
    -rw-r--r-- 1 root root      828 Aug 25 20:07 libQtSql.la
    -rw-r--r-- 1 root root      794 Aug 25 20:07 libQtSql.prl
    lrwxrwxrwx 1 root root       17 Aug 25 03:03 libQtSql.so -> libQtSql.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 03:03 libQtSql.so.4 -> libQtSql.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 03:03 libQtSql.so.4.8 -> libQtSql.so.4.8.6
    -rwxr-xr-x 1 root root   844732 Aug 25 03:03 libQtSql.so.4.8.6
    -rw-r--r-- 1 root root      848 Aug 25 20:07 libQtSvg.la
    -rw-r--r-- 1 root root      814 Aug 25 20:07 libQtSvg.prl
    lrwxrwxrwx 1 root root       17 Aug 25 03:47 libQtSvg.so -> libQtSvg.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 03:47 libQtSvg.so.4 -> libQtSvg.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 03:47 libQtSvg.so.4.8 -> libQtSvg.so.4.8.6
    -rwxr-xr-x 1 root root   428747 Aug 25 03:47 libQtSvg.so.4.8.6
    -rw-r--r-- 1 root root      835 Aug 25 20:07 libQtTest.la
    -rw-r--r-- 1 root root      803 Aug 25 20:07 libQtTest.prl
    lrwxrwxrwx 1 root root       18 Aug 25 03:04 libQtTest.so -> libQtTest.so.4.8.6
    lrwxrwxrwx 1 root root       18 Aug 25 03:04 libQtTest.so.4 -> libQtTest.so.4.8.6
    lrwxrwxrwx 1 root root       18 Aug 25 03:04 libQtTest.so.4.8 -> libQtTest.so.4.8.6
    -rwxr-xr-x 1 root root   195211 Aug 25 03:04 libQtTest.so.4.8.6
    -rw-r--r-- 1 root root  1315980 Aug 25 06:20 libQtUiTools.a
    -rw-r--r-- 1 root root      730 Aug 25 20:08 libQtUiTools.prl
    -rw-r--r-- 1 root root      943 Aug 25 20:08 libQtWebKit.la
    -rw-r--r-- 1 root root      804 Aug 25 20:08 libQtWebKit.prl
    lrwxrwxrwx 1 root root       20 Aug 25 06:04 libQtWebKit.so -> libQtWebKit.so.4.9.4
    lrwxrwxrwx 1 root root       20 Aug 25 06:04 libQtWebKit.so.4 -> libQtWebKit.so.4.9.4
    lrwxrwxrwx 1 root root       20 Aug 25 06:04 libQtWebKit.so.4.9 -> libQtWebKit.so.4.9.4
    -rwxr-xr-x 1 root root 29722397 Aug 25 06:04 libQtWebKit.so.4.9.4
    -rw-r--r-- 1 root root      828 Aug 25 20:07 libQtXml.la
    -rw-r--r-- 1 root root      896 Aug 25 20:07 libQtXmlPatterns.la
    -rw-r--r-- 1 root root      830 Aug 25 20:07 libQtXmlPatterns.prl
    lrwxrwxrwx 1 root root       25 Aug 25 03:46 libQtXmlPatterns.so -> libQtXmlPatterns.so.4.8.6
    lrwxrwxrwx 1 root root       25 Aug 25 03:46 libQtXmlPatterns.so.4 -> libQtXmlPatterns.so.4.8.6
    lrwxrwxrwx 1 root root       25 Aug 25 03:46 libQtXmlPatterns.so.4.8 -> libQtXmlPatterns.so.4.8.6
    -rwxr-xr-x 1 root root  5547166 Aug 25 03:46 libQtXmlPatterns.so.4.8.6
    -rw-r--r-- 1 root root      794 Aug 25 20:07 libQtXml.prl
    lrwxrwxrwx 1 root root       17 Aug 25 02:59 libQtXml.so -> libQtXml.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 02:59 libQtXml.so.4 -> libQtXml.so.4.8.6
    lrwxrwxrwx 1 root root       17 Aug 25 02:59 libQtXml.so.4.8 -> libQtXml.so.4.8.6
    -rwxr-xr-x 1 root root   347438 Aug 25 02:59 libQtXml.so.4.8.6
    lrwxrwxrwx 1 root root       18 Aug 23 21:56 libts-1.0.so.0 -> libts-1.0.so.0.0.0
    -rwxr-xr-x 1 root root    13122 Aug 23 21:56 libts-1.0.so.0.0.0
    -rwxr-xr-x 1 root root      937 Aug 23 21:56 libts.la
    lrwxrwxrwx 1 root root       18 Aug 23 21:56 libts.so -> libts-1.0.so.0.0.0
    drwxr-xr-x 2 root root     4096 Aug 23 21:56 pkgconfig
    -rwxrwxrwx 1 1001 1001       75 Apr 10  2014 README
    drwxr-xr-x 2 root root     4096 Aug 23 21:56 ts
    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6# 
    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6# ls
    bin              demos               lib           Makefile      templates
    changes-4.8.6    doc                 lib2          mkspecs       tools
    config.profiles  examples            lib2.tar.gz   plugins       translations
    config.status    imports             lib3.tar.gz   projects.pro  util
    config.tests     include             LICENSE.FDL   qmake
    configure        INSTALL             LICENSE.GPL3  README
    configure.exe    LGPL_EXCEPTION.txt  LICENSE.LGPL  src
    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6# tar -zcf lib.tar.gz lib
    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6# cd /usr/local/
    root@debian:/usr/local# ls
    arm-linux-lib  etc    include  man   share  tslib
    bin            games  lib      sbin  src    tslib.tar.gz
    root@debian:/usr/local# tar -zcf tslib.tar.gz tslib

     

    7,移植到Embedded arm 

       

      

       上面有说到:

      "

      关于 -prefix  -prefix-install  如果不指定 :

      编译后在 embedded arm 中要把 lib  bin  放在  /usr/local/Trolltech/Qt-4.8.6 这个目录下,不存在就需要创建

      "

      所以 创建  /usr/local/Trolltech/Qt-4.8.6

      

      结果一运行程序 傻眼了,是 

      /usr/local/Trolltech/QtEmbedded-4.8.6-arm

      把  lib.tar.gz  tslib.tar.gz 拷贝到 /usr/local/Trolltech/QtEmbedded-4.8.6-arm 目录下并解压:

      

    tar -xzvf lib.tar.gz 
    tar -xzvf tslib.tar.gz 

      

      配置 so加载路径:

      

    # nano /etc/ld.so.conf
    include /etc/ld.so.conf.d/*.conf
    
    /usr/local/Trolltech/QtEmbedded-4.8.6-arm/tslib/lib
    /usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib

       运行:

      

      ldconfig

      再运行:

      

    #  ./lib/browser
    QWSSocket::connectToLocalFile could not connect:: No such file or directory
    QWSSocket::connectToLocalFile could not connect:: No such file or directory
    QWSSocket::connectToLocalFile could not connect:: No such file or directory
    QWSSocket::connectToLocalFile could not connect:: No such file or directory
    QWSSocket::connectToLocalFile could not connect:: No such file or directory
    QWSSocket::connectToLocalFile could not connect:: No such file or directory
    No Qt for Embedded Linux server appears to be running.
    If you want to run this program as a server,
    add the "-qws" command-line option.

    提示以-qws方式 运行...上文已经多次提到过 qws了吧.这儿就不说了

    #  ./lib/browser -qws
    QSslSocket: cannot resolve SSLv2_client_method
    QSslSocket: cannot resolve SSLv2_server_method

    如果想打开某一个网页如百度,请使用命令:./browser -qws http://www.baidu.com

      

      存在问题鼠标不能操作(后面发现鼠标存在,只是颜色透明,且移动飞快...),键盘 没有中文输入法 .后续解决

    7,单独对qt-everywhere-opensource-src-4.8.6demosrowser 的编译.

      qt库有了后就不需要再次去编译整个项目了,原因你懂的,每次编译5个小时,要疯的.

      所以需要单独对 browser项目进行编译.

      进入 browser 目录.

      使用

      /disk2/qt-everywhere-opensource-src-4.8.6/bin/qmake  -project

      生成  browser.pro 

      由于对整个qt工程编译时已经生成,故可以跳过

      

      编译browser.pro文件. 因为每次 make 都会调用  browser.pro重新 生成 Makefile 文件... 所以对Makefile文件修改,就不太管用了.

      

    ######################################################################
    # Automatically generated by qmake (2.01a) Tue Aug 25 07:41:23 2015
    ######################################################################
    
    TEMPLATE = app
    TARGET = 
    DEPENDPATH += . data htmls
    INCLUDEPATH += . "../../include/QtWebKit"
    QMAKE_LIBS += -lQtWebKit -lQtGui  
    # Input
    HEADERS += autosaver.h 
               bookmarks.h 
               browserapplication.h 
               browsermainwindow.h 
               chasewidget.h 
               cookiejar.h 
               downloadmanager.h 
               edittableview.h 
               edittreeview.h 
               history.h 
               modelmenu.h 
               networkaccessmanager.h 
               searchlineedit.h 
               settings.h 
               squeezelabel.h 
               tabwidget.h 
               toolbarsearch.h 
               urllineedit.h 
               webview.h 
               xbel.h
    FORMS += addbookmarkdialog.ui 
             bookmarks.ui 
             cookies.ui 
             cookiesexceptions.ui 
             downloaditem.ui 
             downloads.ui 
             history.ui 
             passworddialog.ui 
             proxy.ui 
             settings.ui
    SOURCES += autosaver.cpp 
               bookmarks.cpp 
               browserapplication.cpp 
               browsermainwindow.cpp 
               chasewidget.cpp 
               cookiejar.cpp 
               downloadmanager.cpp 
               edittableview.cpp 
               edittreeview.cpp 
               history.cpp 
               main.cpp 
               modelmenu.cpp 
               networkaccessmanager.cpp 
               searchlineedit.cpp 
               settings.cpp 
               squeezelabel.cpp 
               tabwidget.cpp 
               toolbarsearch.cpp 
               urllineedit.cpp 
               webview.cpp 
               xbel.cpp
    RESOURCES += data/data.qrc htmls/htmls.qrc

        增加 新的引用库 和头文件目录 

    INCLUDEPATH += . "../../include/QtWebKit"
    QMAKE_LIBS += -lQtWebKit -lQtGui  

       

      ...

      原 main.cpp文件:

      

    #include "browserapplication.h"
    
    int main(int argc, char **argv)
    {
        Q_INIT_RESOURCE(data);
        BrowserApplication application(argc, argv);
        if (!application.isTheOnlyBrowser())
            return 0;
        application.newMainWindow();
        return application.exec();
    }

    现改为:

    #include "browserapplication.h"
    #include "browsermainwindow.h"
    
    #include <QtGui/QApplication>
    #include <QTextCodec>
    #include <QWSServer>
    //#include <QT>
    #include<QFont>
    
    int main(int argc, char **argv)
    {
        //QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
        //QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
                          
        Q_INIT_RESOURCE(data);
        BrowserApplication application(argc, argv);
    
        //application.setOverrideCursor(Qt::BlankCursor);   //隐藏鼠标
        //application.setOverrideCursor(Qt::ArrowCursor);  //显示正常鼠标
        application.setOverrideCursor(Qt::ArrowCursor);
    
        //设置windows 自带宋体
        //QFont font;
        //font.setPointSize(26);
        //font.setFamily(("simsun"));
        //application.setFont(font);
    
        QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
    
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        
        application.setFont(QFont("wenquanyi", 10));
    
        //QWSServer::setCursorVisible(false);
        if (!application.isTheOnlyBrowser())
            return 0;
    
        BrowserMainWindow  * pMainWindow=NULL;
        pMainWindow=application.newMainWindow();
        pMainWindow->showFullScreen();//全屏
    
        return application.exec();
    }

       这儿使用了 文泉驿 字体  

     application.setFont(QFont("wenquanyi", 10));
    

      下载: http://download.csdn.net/download/chenaini119/7867415

      下载解压后,放入 

    Embedded arm 中的

    /usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib/fonts 中

       编译:

    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6/demos/browser# /disk2/qt-everywhere-opensource-src-4.8.6/bin/qmake
    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6/demos/browser# make

      可能出现错误1:

      make[2]: Nothing to be done for `first'.

      ----

      当前工程是的代码没有更改.

      运行 

      /disk2/qt-everywhere-opensource-src-4.8.6/bin/qmake  

      根据 browser.pro 以生成 Makefile文件

      再

      make

      或者 make clean 清除

       或删除

      /disk2/qt-everywhere-opensource-src-4.8.6/demos/browser 下面的隐藏文件

      

    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6/demos/browser# find . -name '.*'
    .
    ./.pch
    ./.moc
    ./.obj
    ./.uic
    ./.rcc
    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6/demos/browser# rm -rf .obj

       

     可能出现错误2:

    /release-shared-emb-arm -o .obj/release-shared-emb-arm/bookmarks.o bookmarks.cpp
    In file included from bookmarks.cpp:46:0:
    history.h:55:32: fatal error: QWebHistoryInterface: No such file or directory

      出现编译错误 缺少 QtWebKit

      browser.pro中添加

    INCLUDEPATH += . "../../include/QtWebKit" 
    QMAKE_LIBS += -lQtWebKit -lQtGui   

      

    ######################################################################
    # Automatically generated by qmake (2.01a) Tue Aug 25 07:41:23 2015
    ######################################################################
    
    TEMPLATE = app
    TARGET = 
    DEPENDPATH += . data htmls
    #CONFIG += uitools
    INCLUDEPATH += . "../../include/QtWebKit" 
    QMAKE_LIBS += -lQtWebKit -lQtGui   
    # Input
    
    
    #............后面省略....

      可能出现错误3:

     程序连接时找不到 QUiLoader 所在的库

      webview.cpp:(.text+0x2d8): undefined reference to `QUiLoader::QUiLoader(QObject*)'
    sk2/qt-everywhere-opensource-src-4.8.6/lib -lQtGui -lQtNetwork -lQtCore -lpthread 
    .obj/release-shared-emb-arm/webview.o: In function `WebPage::createPlugin(QString const&, QUrl const&, QStringList const&, QStringList const&)':
    webview.cpp:(.text+0x2d8): undefined reference to `QUiLoader::QUiLoader(QObject*)'
    webview.cpp:(.text+0x318): undefined reference to `QUiLoader::createWidget(QString const&, QWidget*, QString const&)'
    webview.cpp:(.text+0x344): undefined reference to `QUiLoader::~QUiLoader()'
    webview.cpp:(.text+0x36c): undefined reference to `QUiLoader::~QUiLoader()'

       在lib 下面查找:

      

    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6/lib# find . -name '*Tools*'
    ./libQtScriptTools.so
    ./libQtUiTools.prl
    ./libQtScriptTools.so.4.8
    ./pkgconfig/QtUiTools.pc
    ./pkgconfig/QtScriptTools.pc
    ./libQtScriptTools.so.4
    ./libQtScriptTools.so.4.8.6
    ./libQtScriptTools.prl
    ./libQtScriptTools.la
    ./libQtUiTools.a

       存在一个  ./libQtUiTools.a  的静态库文件.

      

      修改 browser.pro文件

      

    ######################################################################
    # Automatically generated by qmake (2.01a) Tue Aug 25 07:41:23 2015
    ######################################################################
    
    TEMPLATE = app
    TARGET = 
    DEPENDPATH += . data htmls
    #CONFIG += uitools
    INCLUDEPATH += . "../../include/QtWebKit" "../../include/QtUiTools"
    QMAKE_LIBS += -lQtWebKit -lQtGui   -lQtUiTools
    # Input
    
    
    #............后面省略..............
    root@debian:/disk2/qt-everywhere-opensource-src-4.8.6/demos/browser# ls -la
    total 3248
    drwxr-xr-x  9 1001 1001    4096 Aug 26 12:48 .
    drwxr-xr-x 32 1001 1001    4096 Aug 23 05:47 ..
    -rw-r--r--  1 1001 1001    2300 Apr 10  2014 addbookmarkdialog.ui
    -rw-r--r--  1 1001 1001    3134 Apr 10  2014 autosaver.cpp
    -rw-r--r--  1 1001 1001    2638 Apr 10  2014 autosaver.h
    -rw-r--r--  1 1001 1001   31630 Apr 10  2014 bookmarks.cpp
    -rw-r--r--  1 1001 1001    8981 Apr 10  2014 bookmarks.h
    -rw-r--r--  1 1001 1001    2544 Apr 10  2014 bookmarks.ui
    -rwxr-xr-x  1 root root 1404709 Aug 26 12:48 browser

      ./browser 已经成功生成 .

      

      再上个图

      

      

      中文 已经有了,,虽然有些丑...将就吧.

      

       在运行时候加个参数 ./browser -qws -nomouse 这个是禁止了所有的鼠标功能,连点击都不响应 -mouse是使用鼠标.

      但程序运行后还是没有看见光标

      上面图片 没有显示出来可能是因为  -depths 16,24,32 改为 -depths all

          -depths <list> ...... Comma-separated list of supported bit-per-pixel
                              depths, from: 1, 4, 8, 12, 15, 16, 18, 24, 32 and 'all'.

    --------2017

    qupzilla->Qt-5.3.2

    x64上编译命令

    ./configure  -opensource -release -shared -Declarative -importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions  -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg -webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg  -make libs -make tools  -make examples -make demos  -make translations -nomake docs -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-x86_64-g++   -little-endian -qt-freetype -depths all -qt-gfx-linuxfb  -embedded x86     -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch  -I/usr/local/ssl/include -L/usr/local/ssl/lib  -confirm-license

    可能遇到问题:

    qt  qatomic_i386.h:177: Error: incorrect register `%rbx' used with `l' suffix

    本来想Qt/E 先编译一个X86的版本到PC上使用qvfb仿真一下,所以就按照网上的办法开始编译

    起初我编译Qt/E时 ./configure -xplatform qws/Linux-x86-g++ 是按照网上的设置

    但是会报错:

    incorrect register `%rbp' used with `l' suffix

    这个问题其实是我的Ubuntu是64位的,所以需要将这里的编译器修改成:-xplatform qws/linux-x86_64-g++

    如果你是其他架构,可以去Qt文件夹下的mkspecs和mkspecs/qws/中找 符合你的平台要求的编译器

    /home/webkittest/qt-everywhere-opensource-src-4.8.6/tools/designer/src/lib/shared/previewmanager.cpp:820:16: error: cannot convert âboolâ to âQWidget*â in return false

    改为return 0;

     x64 ,gcc6,C++11,itemviews.cpp:396:74: error: invalid conversion from  int  to  QFlags<QItemSelectionModel::SelectionFlag>::Zero {aka void**}  [-fpermissive]

    http://www.qtcentre.org/threads/48957-error-invalid-conversion-from-%E2%80%98int%E2%80%99-to-%E2%80%98InitializationState

    改为

      

    view()->selectionModel()->select(index, 
        QItemSelectionModel::Columns & QItemSelectionModel::Deselect );
    
    
    view()->selectionModel()->select(index, 
        QItemSelectionModel::SelectionFlags(
        QItemSelectionModel::Columns & QItemSelectionModel::Deselect ));

     x64下  error: shift expression  (1048575 << 20)  overflows [-fpermissive]

    gcc6编译时,报错.

    https://lists.yoctoproject.org/pipermail/yocto/2016-July/031272.html

    error: enumerator value for  BackgroundMask  is not an integer constant
    qt-everywhere-opensource-src-4.8.6/src/xmlpatterns/api/qcoloroutput_p.h
     error: shift expression  (1048575 << 20)  overflows [-fpermissive]

    +| api/qcoloroutput_p.h:74:60: error: shift expression '(1048575 << 20)' overflows [-fpermissive]
    +| api/qcoloroutput_p.h:74:63: error: enumerator value for 'BackgroundMask' is not an integer constant
    +|              BackgroundMask  = ((1 << BackgroundShift) - 1) << BackgroundShift

    改为:
    class ColorOutput
        {
            enum
            {
                ForegroundShift = 10,
                BackgroundShift = 20,
                SpecialShift    = 20,
                //gcc 6之前版本使用
                //ForegroundMask  = ((1 << ForegroundShift) - 1) << ForegroundShift,
                //BackgroundMask  = ((1 << BackgroundShift) - 1) << BackgroundShift
                //gcc 6使用下面
                ForegroundMask  = 0x1f << ForegroundShift,
                BackgroundMask  = 0x7 << BackgroundShift
            };
      ..........

    x64 gcc6 C++11下 error: std::tr1 has not been declaredfrom

                     from ../3rdparty/javascriptcore/JavaScriptCore/pcre/pcre_exec.cpp:50:
    ../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:173:69: error: std::tr1 has not been declared
         template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
                                                                         ^~~
    ../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:173:74: error: expected â{â before âhas_trivial_constructorâ
         template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
                                                                              ^~~~~~~~~~~~~~~~~~~~~~~
    ../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:174:68: error: âstd::tr1â has not been declared
         template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
                                                                        ^~~
    ../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:174:73: error: expected â{â before âhas_trivial_destructorâ
         template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
                                                                             ^~~~~~~~~~~~~~~~~~~~~~

      修改 qt-everywhere-opensource-src-4.8.6/src/script/script.pro为如下:

    TARGET     = QtScript
    QPRO_PWD   = $$PWD
    QT         = core
    DEFINES   += JSC=QTJSC jscyyparse=qtjscyyparse jscyylex=qtjscyylex jscyyerror=qtjscyyerror WTF=QTWTF
    DEFINES   += QT_BUILD_SCRIPT_LIB
    DEFINES   += QT_NO_USING_NAMESPACE
    DEFINES   += QLALR_NO_QSCRIPTGRAMMAR_DEBUG_INFO
    #win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x66000000       ### FIXME
    
    unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore
    
    include(../qbase.pri)
    
    CONFIG += building-libs
    
    # FIXME: shared the statically built JavaScriptCore
    
    # Fetch the base WebKit directory from the WEBKITDIR environment variable;
    # fall back to src/3rdparty otherwise
    WEBKITDIR = $$(WEBKITDIR)
    isEmpty(WEBKITDIR) {
        WEBKITDIR = $$PWD/../3rdparty/javascriptcore
        GENERATED_SOURCES_DIR = generated
    } else {
        message(using external WebKit from $$WEBKITDIR)
        CONFIG -= QTDIR_build
    }
    include($$WEBKITDIR/WebKit.pri)
    
    # Disable a few warnings on Windows.
    # These are in addition to the ones disabled in WebKit.pri
    win32-msvc*: QMAKE_CXXFLAGS += -wd4396 -wd4099
    
    # Windows CE-specific stuff copied from WebCore.pro
    # ### Should rather be in JavaScriptCore.pri?
    wince* {
        INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/os-wince
        INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/os-win32
        LIBS += -lmmtimer
    }
    
    !qpa:mac {
        DEFINES += ENABLE_JSC_MULTIPLE_THREADS=0
        LIBS_PRIVATE += -framework AppKit
    }
    qpa:mac {
        DEFINES += ENABLE_JSC_MULTIPLE_THREADS=0
        !ios {
          LIBS_PRIVATE += -framework CoreServices
        } else {
          LIBS_PRIVATE += -framework CoreFoundation
        }
    }
    
    include($$WEBKITDIR/JavaScriptCore/JavaScriptCore.pri)
    
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/parser
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/bytecompiler
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/debugger
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/runtime
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/wtf
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/unicode
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/interpreter
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/jit
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/profiler
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/wrec
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/API
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/bytecode
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/assembler
    INCLUDEPATH += $$WEBKITDIR/JavaScriptCore/generated
    
    # This line copied from WebCore.pro
    DEFINES += WTF_USE_JAVASCRIPTCORE_BINDINGS=1 WTF_CHANGES=1
    
    CONFIG(release, debug|release):DEFINES += NDEBUG
    
    solaris-g++:isEqual(QT_ARCH,sparc) {
        CONFIG -= separate_debug_info
        CONFIG += no_debug_info
    }
    
    # Avoid JSC C API functions being exported.
    DEFINES += JS_NO_EXPORT
    
    INCLUDEPATH += $$PWD
    
    include(script.pri)
    
    symbian {
        TARGET.UID3=0x2001B2E1
    }
    
    symbian {
        symbian-abld|symbian-sbsv2 {
            MMP_RULES += ALWAYS_BUILD_AS_ARM
        }  else {
            QMAKE_CFLAGS -= --thumb
            QMAKE_CXXFLAGS -= --thumb
        }
        QMAKE_CXXFLAGS.ARMCC += -OTime -O3
    }
    
    integrity {
        CFLAGS += --diag_remark=236,82
    }
    
    # WebKit doesn't compile in C++0x mode
    *-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x
    
    # gcc6
    # Fixes compilation errors with GCC 6.1.0
    QMAKE_CXXFLAGS += -std=gnu++98

    debugging/qscriptdebuggerconsole.cpp:492:16: error: cannot convert  bool  to  QScriptDebuggerConsoleCommandJob*  in return
             return false;

    webkittest/qt-everywhere-opensource-src-4.8.6/src/scripttools/debugging/qscriptdebuggerconsole.cpp

    QScriptDebuggerConsoleCommandJob *QScriptDebuggerConsole::consumeInput(
        const QString &input, QScriptMessageHandlerInterface *messageHandler,
        QScriptDebuggerCommandSchedulerInterface *commandScheduler)
    {

    ...

     if (check.state() == QScriptSyntaxCheckResult::Intermediate)
            return 0;

    ...

    }

    改为return 0




  • 相关阅读:
    一个完整的移动端项目的构建步骤——框架搭构1
    简单日历,纯js
    javascript语句语义大全(7)
    微软笔试Highway问题解析
    中国电信翼支付2014编程大赛决赛
    海岛问题
    大数计算
    Dijkstra算法
    Android测试之Keycode
    字符串解析
  • 原文地址:https://www.cnblogs.com/bleachli/p/4759587.html
Copyright © 2020-2023  润新知