OK6410 & QT (2):交叉编译QT LIB

HOST:ubuntu 12.04LTS, 64bit, Core i7-4790K,gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

CROSS-TOOLCHAIN:gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)

SRC:

tslib-1.4.tar.gz

qt-everywhere-opensource-src-5.6.1.tar.gz

qt-opensource-linux-x64-5.6.1.run

1 编译linux_atomic库,(undefined reference to `__sync_sub_and_fetch_4‘ ),高版本的交叉编译工具可以无视;

参考[http://blog.csdn.net/wangmingape/article/details/24545775]。

首先下载gcc 4.6.0源码,在gcc-4.6.0/gcc/config/arm目录下可以找到linux-atomic.c文件。

将这个文件复制到你的工作目录,最好新建一个文件夹,并添加build.bash脚本

libtool --tag=CC --mode=compile arm-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-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo

  执行后就在你的当前目录在生成.libs文件夹,(tree -a )

├── build.bash
├── liblinux-atomic.la
├── .libs
│   ├── liblinux-atomic.a
│   ├── liblinux-atomic.la -> ../liblinux-atomic.la
│   └── linux-atomic.o
├── linux-atomic.c
├── linux-atomic.lo
├── linux-atomic.o
└── linux-atomic.Tpo

  这个文件夹中文件复制到你的库目录,最好新建文件夹,如 /opt/linux-atomic

liblinux-atomic.a  liblinux-atomic.la  linux-atomic.o

2 接下来我们开始编译qt,先将qt-everywhere-opensource-src-5.6.1.tar.gz 解压到你的工作目录。

  1)编辑qmake.conf,文件位置在qt-everywhere-opensource-src-5.6.1\qtbase\mkspecs\linux-arm-gnueabi-g++。

在这个文件里,主要是配置交叉编译工具,tslib的库也需要在这里配置。我的配置如下,红色的是修改的部分:

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

#S3C6410
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE   +=-O2 -march=armv5te
QMAKE_CXXFLAGS_RELEASE +=-O2 -march=armv5te

QMAKE_INCDIR += /opt/tslib/include
QMAKE_LIBDIR += /opt/tslib/lib

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

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

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

  2)在qt-everywhere-opensource-src-5.6.1目录下创建编译脚本,具体如下:

./configure -prefix /opt/qt_arm -opensource -confirm-license -release -shared -static -xplatform linux-arm-gnueabi-g++ -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -tslib -no-opengl -no-sse2 -no-openssl -no-nis -no-cups -no-glib -no-dbus -no-xcb -no-eglfs -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -no-iconv -make libs -make examples -nomake tools -nomake tests -skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland -I/opt/tslib/include -L/opt/tslib/lib -v -llinux-atomic -L/opt/linux-atomic

  红色标记出比较重要的地方:

-prefix :将来库安装目录

    -xplatform:说明使用的conf文件位置,即)mkspecs\linux-arm-gnueabi-g++\qmake.conf)

-I/opt/tslib/include -L/opt/tslib/lib:将tslib库加进来

-llinux-atomic -L/opt/linux-atomic:将atomic库加进来

3)执行脚本,为下一步的编译做好准备活动,我的环境信息输出如下:

Building on:   linux-g++ (unknown, CPU features: none detected)
Building for:  linux-arm-gnueabi-g++ (arm, CPU features: none detected)
Platform notes:

            - Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx

qmake vars .......... styles += mac fusion windows DEFINES += QT_NO_MTDEV DEFINES += QT_NO_LIBUDEV DEFINES += QT_NO_LIBINPUT EXTRA_INCLUDEPATH +=  "/opt/tslib/include" EXTRA_LIBS +=  -L"/opt/tslib/lib" -l"linux-atomic" -L"/opt/linux-atomic" sql-drivers =  sqlite sql-plugins =  qmake switches ......... 

Build options:
  Configuration .......... accessibility audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile enable_new_dtags evdev eventfd freetype full-config getaddrinfo getifaddrs gif harfbuzz inotify ipv6ifname jpeg large-config largefile linuxfb medium-config minimal-config mremap no-pkg-config pcre png posix_fallocate precompile_header qpa qpa reduce_exports release release_tools rpath small-config static threadsafe-cloexec tslib zlib
  Build parts ............  libs examples
  Mode ................... release; optimized tools
  Using sanitizer(s)...... none
  Using C++ standard ..... c++11
  Using gold linker....... no
  Using new DTAGS ........ yes
  Using PCH .............. yes
  Using LTCG ............. no
  Target compiler supports:
    Neon ................. no

Qt modules and options:
  Qt D-Bus ............... no
  Qt Concurrent .......... yes
  Qt GUI ................. yes
  Qt Widgets ............. yes
  Large File ............. yes
  QML debugging .......... yes
  Use system proxies ..... no

Support enabled for:
  Accessibility .......... yes
  ALSA ................... no
  CUPS ................... no
  Evdev .................. yes
  FontConfig ............. no
  FreeType ............... qt
  Glib ................... no
  GStreamer .............. no
  GTK theme .............. no
  HarfBuzz ............... yes (bundled copy)
  Iconv .................. no
  ICU .................... no
  Image formats:
    GIF .................. yes (in QtGui, using bundled copy)
    JPEG ................. yes (in QtGui, using bundled copy)
    PNG .................. yes (in QtGui, using bundled copy)
  libinput................ no
  Logging backends:
    journald ............... no
    syslog   ............... no
  mtdev .................. no
  Networking:
    getaddrinfo .......... yes
    getifaddrs ........... yes
    IPv6 ifname .......... yes
    libproxy.............. no
    OpenSSL .............. no
  NIS .................... no
  OpenGL / OpenVG:
    EGL .................. no
    OpenGL ............... no
    OpenVG ............... no
  PCRE ................... yes (bundled copy)
  pkg-config ............. no
  PulseAudio ............. no
  QPA backends:
    DirectFB ............. no
    EGLFS ................ no
      EGLFS i.MX6 ........ no
      EGLFS i.MX6 Wayland. no
      EGLFS EGLDevice .... no
      EGLFS GBM .......... no
      EGLFS Mali ......... no
      EGLFS Raspberry Pi . no
      EGLFS X11 .......... no
    LinuxFB .............. yes
    Mir client............ no
    XCB .................. no
  Session management ..... yes
  SQL drivers:
    DB2 .................. no
    InterBase ............ no
    MySQL ................ no
    OCI .................. no
    ODBC ................. no
    PostgreSQL ........... no
    SQLite 2 ............. no
    SQLite ............... qt-qt
    TDS .................. no
  tslib .................. yes
  udev ................... no
  xkbcommon-x11........... no
  xkbcommon-evdev......... no
  zlib ................... yes (bundled copy)

WARNING: Using static linking will disable the use of dynamically
loaded plugins. Make sure to import all needed static plugins,
or compile needed modules into the library.

NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1.
Configure with ‘-qreal float‘ to create a build that is binary compatible with 5.1.

NOTE: -optimized-tools is not useful in -release mode.

Qt is now configured for building. Just run ‘make‘.
Once everything is built, you must run ‘make install‘.
Qt will be installed into /opt/qt_arm

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

  4)编译。qt非常大,需要编译比较长的时间,多核的同学注意使用make -jX命令,X是你CPU的核心数,这样可以加快编译速度。

make -j8 && sudo make -j8 install

  5)配置环境变量。这样/opt/qt_arm目录就有了你需要的库了,将库原封不动的搬到开发板,基本上就大功告成了。

在开发板上建立环境变量:

export QTDIR=/opt/qt_arm
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x600:mmSize=800x600:offset=0x0:tty=/dev/tty1

export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1

 在开发板的/opt/qt_arm/examples路径下有一些示例可以直接拿来测试。

PS: make clean && make distclean总是失败的,重新编译的也会报错,还没有搞清楚哪里的问题。

时间: 2024-10-12 08:10:41

OK6410 & QT (2):交叉编译QT LIB的相关文章

QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)

前两天入手了一块2.8’的tft液晶显示屏,于是和树莓派连了一发,成功将命令行显示在了这块小的可怜的屏幕上之后,觉得这屏幕就显示个黑白内容太浪费了,于是考虑开发一个”脸”(图形用户界面,GUI).首先考虑用C语言或者Python来堆图形界面,但是发现不管是C语言的图形库SDL亦或者OpenGL来堆这货都有点麻烦,毕竟我也不是想显示个太过于复杂的图形界面在那块屏幕上,只是显示一个最基本的文字数字就满足了.于是考虑到QT库.之前曾经学过一段时间的QT For Win32,那个环境很好搭建,从http

:: error: 无法打开文件“d:\Qt\2010.05\qt\lib\qtmaind.lib”

新建一个工程马上编译也会出现这个错误:: error: 无法打开文件“d:\Qt\2010.05\qt\lib\qtmaind.lib” vc的编译器, 而你安装的是mingw版本的qt. 工具-选项-构建和运行-构建套件,你应该是选择的是桌面(默认).点击它,看看编译器那个框选择的是什么?默认选择的是M..V..C++(86).编译方式从VS2010改成Mingw,就不会报错了

TestDisk 之Qt creator + MinGW +Qt +gdb

现在采用安装组合为:Qt Creator(2.6.2) + MinGW(在线安装)     + QT(4.8.6) 先安装MinGW,再安装QT,后安装QT Creator:安装好后,构建是不能用的,还要设置哦!我的机子是win7 i3 64位 安装的时候是按照32位来安装的. 1.      QT :: error: 无法打开文件“d:\Qt\2010.05\qt\lib\qtmaind.lib” 我今天就遇到这个问题了.纠结半天,整了半天,终于解决!!! 解决方法:工具-选项-构建和运行-构

非Qt工程使用Qt的信号槽机制

非Qt工程,使用Qt的信号槽机制,蛋疼不?反正我现在就是要做这样一件蛋疼的事. 要使用Qt的信号槽机制,下面是从Qt Assist里面关于 signal & slots 的一句介绍: All classes that contain signals or slots must mention Q_OBJECT at the top of their declaration. They must also derive (directly or indirectly) from QObject.

[QT][问题]关于QT语言家使用失败的原因之一

按照标准的qt使用教程 ( http://www.qter.org/forum.php?mod=viewthread&tid=781 ) 实践了下,发现除去主界面外,点开的窗口多语言没有问题.对次十分的不解,于是就查找了下问题. 原来加载与语言的时候 创建 MainWindow w; 需要在 加载语言之后.(动态加载除外). 类似问题: 1. qt中英文翻译: http://bbs.qter.org/forum.php?mod=viewthread&tid=288 qt问题搜索及学习推荐:

Qt on Android: Qt Quick事件处理之鼠标、键盘、定时器

在<Qt on Android: Qt Quick 事件处理之信号与槽>中介绍了 QML 中如何使用内建类型的信号以及如何自定义信号,这次我们来看看如何处理鼠标.键盘.定时器等事件.这些时间在处理时,通常是通过信号来完成的. 广而告之:我正在参加 CSDN 博文大赛,请给我的参赛文章<Qt on Android: Qt Quick 事件处理之信号与槽>投票,谢谢. 鼠标事件处理 桌面开发的话,难免要处理鼠标事件-- 变色矩形示例 看一个简单的处理鼠标事件的例子,先看代码(handl

Qt 5.7 &gt; Qt Applications

本文翻译自Qt官方文档: http://doc.qt.io/qt-5/qmlapplications.html QML 应用 QML是声明式语言,它使得用户界面以及交互行为可以被"描述"出来.这是一种可读性非常高.动态互联其中的构件的语言,并且它允许构件可以非常容易的被重用和界面自定义.使用QtQuick模块,设计者和开发者可以使用QML开发流畅的动画界面,也可以选择将用户界面与后端的C++库连接起来. 什么是QML? QML是用户界面规范与编程语言.它使得开发者和设计者可以开发出高性

Qt分析:Qt中的两种定时器(可是QObject为什么要提高定时器呢,没必要啊。。。)

Qt有两种定时器,一种是QObject类的定时器,另一种是QTimer类的定时器. (1)QObject类的定时器 QObject类提供了一个基本的定时器,通过函数startTimer()来启动,通过killTimer()来结束,通过QTimerEvent来处理定时器事件. int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer); void killTimer(int id); void QObject::t

Qt on Android: Qt 5.3.0 发布,针对 Android 改进说明

5月20日,Qt 官方博客宣布 Qt 5.3.0 发布! 这个版本聚焦在性能.稳定性和可用性的提升上,与 5.1 / 5.2 相比有很大提升. 5.3.0 的主要变化: 稳定能.可用性大大提升 Qt for Windows Runtime Beta Official support for QNX 6.6 and QNX 6.5 SP1 引入的新特性 QQuickWidget,混合使用 Qt Widgets 和 Qt Quick 变得更加方便 Compiled Qt Quick Purchasi