现在的位置: 首页 > 综合 > 正文

基于Arm(OMAP3530)平台的Linux上编译QT4.6.2

2013年08月10日 ⁄ 综合 ⁄ 共 7918字 ⁄ 字号 评论关闭

文章首发:http://user.qzone.qq.com/276546441/gift?target=send_5th&senduin=58720861

环境:ubuntu 8.04

硬盘空间:40G

QT代码:4.6.2 (下载地址:http://qt.nokia.com/downloads

步骤:

  A. Embedded版

  1、修改路径为[qt-install-dir]/mkspecs/qws/linux-arm-g++/qmake.conf的文件:

     #  
    # qmake configuration for building with arm-linux-g++  
    #  
 
    include(../../common/g++.conf)  
    include(../../common/linux.conf)  
    include(../../common/qws.conf)  
 
    # 修改g++里的宏定义  
    #设置使用ARM高级特性的编译标志  
    QMAKE_CFLAGS_RELEASE =   -O3 -march=armv7-a   
    -mtune=cortex-a8   
    -mfpu=neon   
    -mfloat-abi=softfp  
    QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a   
    -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp  
 
    # 设置交叉编译工具链  
    # 本项目中使用的交叉编译工具下载地址为  
    # http://www.codesourcery.com/sgpp/lite/arm  
    #  
    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++  
 
    # 修改linux.conf中的宏定义  
    QMAKE_AR = arm-none-linux-gnueabi-ar cqs  
    QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy  
    QMAKE_STRIP = arm-none-linux-gnueabi-strip  
 
    load(qt_config) 
    #
    # qmake configuration for building with arm-linux-g++
    #

    include(../../common/g++.conf)
    include(../../common/linux.conf)
    include(../../common/qws.conf)

    # 修改g++里的宏定义
    #设置使用ARM高级特性的编译标志
    QMAKE_CFLAGS_RELEASE =   -O3 -march=armv7-a
    -mtune=cortex-a8
    -mfpu=neon
    -mfloat-abi=softfp
    QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a
    -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp

    # 设置交叉编译工具链
    # 本项目中使用的交叉编译工具下载地址为
    # http://www.codesourcery.com/sgpp/lite/arm
    #
    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++

    # 修改linux.conf中的宏定义
    QMAKE_AR = arm-none-linux-gnueabi-ar cqs
    QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
    QMAKE_STRIP = arm-none-linux-gnueabi-strip

    load(qt_config) 
     2、配置QT脚编译选项

  控制台进入QT代码根目录,执行./configure -prefix <PATH_TO_NFS> -embedded arm -platform /qws/linux-x86-g++
    -xplatform /qws/linux-omap3-g++ -depths 16,24,32 -no-mmx
    -no-3dnow -no-sse -no-sse2 -
    no-glib -no-cups
    -no-largefile -no-accessibility -no-openssl -
    no-gtkstyle -qt-mouse-pc -qt-mouse-linuxtp
    -qt-mouse-linuxinput -plugin-mouse-linuxtp -plugin-mouse-pc -fast

    注:1,这些配置选项为TI的参考配置,自己可以随意增减来测试效果,
      2,参数的具体作用可以通过./configure --help来查看
      3, <PATH_TO_NFS>是QT被安装的到板子上的全路径,用来保存编译生成的各种文件。

  3、排除错误的方法

  配置出错时,可以到tmp目录下,进入长得像的配置QT的临时文件夹,找config.log文件,此文件中有出错的详细信息。如果没出错,执行make 与make install,都没有错误,则编译成功,把<PATH_TO_NFS>中的文件同名同目录拷贝到板子上的SD卡中便可以使用QT了。

  4、版本说明

  Embedded版本的QT,自己实现了X-Server与X-Client,故不能与已有的桌面环境共存,在OpenEmbedded的开源项目中,许多可以使用于X11环境中的工具,在QT的Embedded环境中暂时没发现能使用,要想使用它们只能把QT编译成基ARM体系的X11版本,具体步骤参考B。

  B. X11版[2]

  1、编译angstrom

  我们板子中使用的桌面环境为angstrom, 编译QT X11需要把此桌面环境编译出来,按照[5]提供的步骤进行angstrom的编译,其中MACHINE ?= "beagleboard" bitbake base-image ; bitbake console-image x11-image后增加beagleboard-demo-image,可能直接bitbake beagleboard-demo-image就可以。网速快的话十几个小时应该可以完成编译过程。

  2、设置Scratchbox2的环境

  先安装Scratchbox2,执行sudo apt-get install help2man texi2html texinfo 然后执行sudo apt-get install Scratchbox2,便可安装成功;安装成功后,修改/usr/bin/sb2-build-libtool中的配置值

  - ./configure –prefix=$HOME/.scratchbox2/$TARGET –build=$(uname -m)-unknown-linux-gnu  
  + ./configure –host=x86 –prefix=$HOME/.scratchbox2/$TARGET –build=$(uname -m)-unknown-linux-gnu 
  - ./configure –prefix=$HOME/.scratchbox2/$TARGET –build=$(uname -m)-unknown-linux-gnu
  + ./configure –host=x86 –prefix=$HOME/.scratchbox2/$TARGET –build=$(uname -m)-unknown-linux-gnu
  sudo dpkg-reconfigure dash 选择否,修改/bin/sh指向为安全指向,否则sb2-init执行不了。

  在 /etc/sysctl.conf中设置vm.mmap_min_addr = 0,设置完成后需要重启,否则sb2-init执行不了。

  在~/OE/angstrom-dev/staging/armv7a-angstrom-linux-gnueabi目录中执行sb2-init -c /usr/bin/qemu-arm angstrom-beagle ~/OE/angstrom-dev/cross/armv7a/bin/arm-angstrom-linux-gnueabi-gcc 。最后一个参数为编译器工具链路径,可以使用/opt/codesourcery/arm-none-linux-gnueabi/arm-2007q3/bin/arm-angstrom-linux-gnueabi-gcc(这个是我机已经配置好交叉编译的工具路径)    

  3、编译QT X11
  修改/qws/linux-arm-g++/qmake.conf为

    #  
    # qmake configuration for linux-g++  
    #  
 
    MAKEFILE_GENERATOR      = UNIX  
    TEMPLATE                = app  
    CONFIG                  += qt warn_on release incremental link_prl  
    QT                      += core gui  
    QMAKE_INCREMENTAL_STYLE = sublib  
 
    include(../../common/g++.conf)  
    include(../../common/linux.conf)  
    # modifications to g++.conf  
 
    QMAKE_CC                = sb2 gcc  
    QMAKE_CXX               = sb2 g++  
    QMAKE_LINK              = sb2 g++  
    QMAKE_LINK_SHLIB        = sb2 g++  
 
    # modifications to linux.conf  
    QMAKE_AR                = sb2 ar cqs  
    QMAKE_OBJCOPY           = sb2 objcopy  
    QMAKE_STRIP             = sb2 strip  
    load(qt_config) 
    #
    # qmake configuration for linux-g++
    #

    MAKEFILE_GENERATOR      = UNIX
    TEMPLATE                = app
    CONFIG                  += qt warn_on release incremental link_prl
    QT                      += core gui
    QMAKE_INCREMENTAL_STYLE = sublib

    include(../../common/g++.conf)
    include(../../common/linux.conf)
    # modifications to g++.conf

    QMAKE_CC                = sb2 gcc
    QMAKE_CXX               = sb2 g++
    QMAKE_LINK              = sb2 g++
    QMAKE_LINK_SHLIB        = sb2 g++

    # modifications to linux.conf
    QMAKE_AR                = sb2 ar cqs
    QMAKE_OBJCOPY           = sb2 objcopy
    QMAKE_STRIP             = sb2 strip
    load(qt_config)

     修改QT根目录下的configure脚本文件,其中行号不正确,具体行号位置以

    if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG –exists fontconfig 2>/dev/null; then 
    QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG –cflags fontconfig 2>/dev/null`  
    QT_LIBS_FONTCONFIG=`$PKG_CONFIG –libs fontconfig 2>/dev/null` 
    if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG –exists fontconfig 2>/dev/null; then
    QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG –cflags fontconfig 2>/dev/null`
    QT_LIBS_FONTCONFIG=`$PKG_CONFIG –libs fontconfig 2>/dev/null`
  的位置为准,此处主要用于配置字库的头文件路径。

    diff –git a/configure b/configure  
    index 3f3e55a..54de96b 100755  
    ---a/configure  
    +++ b/configure  
    @@ -5115,6 +5115,10 @@ if [ "$PLATFORM_X11" = "yes" ]; then 
    if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG –exists fontconfig 2>/dev/null; then 
    QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG –cflags fontconfig 2>/dev/null`  
    QT_LIBS_FONTCONFIG=`$PKG_CONFIG –libs fontconfig 2>/dev/null`  
    +        if $PKG_CONFIG –exists freetype2 2>/dev/null; then 
    +            QT_CFLAGS_FONTCONFIG="$QT_CFLAGS_FONTCONFIG `$PKG_CONFIG –cflags freetype2 2>/dev/null`" 
    +            QT_LIBS_FONTCONFIG="$QT_LIBS_FONTCONFIG `$PKG_CONFIG –libs freetype2 2>/dev/null`" 
    +        fi  
    else 
    QT_CFLAGS_FONTCONFIG=  
    QT_LIBS_FONTCONFIG="-lfreetype -lfontconfig" 
    diff –git a/configure b/configure
    index 3f3e55a..54de96b 100755
    ---a/configure
    +++ b/configure
    @@ -5115,6 +5115,10 @@ if [ "$PLATFORM_X11" = "yes" ]; then
    if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG –exists fontconfig 2>/dev/null; then
    QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG –cflags fontconfig 2>/dev/null`
    QT_LIBS_FONTCONFIG=`$PKG_CONFIG –libs fontconfig 2>/dev/null`
    +        if $PKG_CONFIG –exists freetype2 2>/dev/null; then
    +            QT_CFLAGS_FONTCONFIG="$QT_CFLAGS_FONTCONFIG `$PKG_CONFIG –cflags freetype2 2>/dev/null`"
    +            QT_LIBS_FONTCONFIG="$QT_LIBS_FONTCONFIG `$PKG_CONFIG –libs freetype2 2>/dev/null`"
    +        fi
    else
    QT_CFLAGS_FONTCONFIG=
    QT_LIBS_FONTCONFIG="-lfreetype -lfontconfig"

  然后执行 ./configure -prefix <PATH_TO_NFS> -arch arm -xplatform pws/linux-arm-g++ -force-pkg-config 便可以完成配置。最后执行make与make install。执行make时会出现 global/qlibraryinfo.cpp:490: error: expected primary-expression before '/' token的错误,修改出错位置的ELF_INTERPRETER,为"/lib/ld-linux.so.2"(此值可以从Makefile中的-DELF_INTERPRETER=得到)即可。

参考:

  1. http://processors.wiki.ti.com/index.php/Building_Qt

  2. http://labs.trolltech.com/blogs/2009/11/20/building-qt-to-make-use-of-the-beagle-boards-sgx-gpu/

  3. http://labs.trolltech.com/blogs/2010/02/05/qtx11-bring-up-on-tegra2-with-full-opengl-es-2-support

  4. http://labs.trolltech.com/blogs/2009/09/10/cross-compiling-qtx11/

  5. http://www.angstrom-distribution.org/building-angstrom

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yybing/archive/2010/06/02/5641321.aspx

抱歉!评论已关闭.