环境:Ubuntu-14.04

交叉编译器:arm-linux-gnueabi-4.5.1

qt版本:qt-everywhere-opensource-src-5.6.2

说明:

交叉编译qt库前,若要对触摸屏支持,则需先交叉编译安装tslib。

可参考上一篇【Ubuntu下交叉编译tslib库并移植到ARM板上】

一、交叉编译qt库

下载源码包,解压,进入源码目录

$ cd qt-everywhere-opensource-src-5.6.2

1、查看并修改编译架构信息(编译器)

这里应是采用arm-linux架构,进入以入目录,并查看相关信息:

在 qtbase/mkspecs 目录下可见到各种支持的架构,

很明显我们应该选择 linux-arm-架构,打开 qmake.conf 查看编译配置参数:

$ cd qtbase/mkspecs/
$ vi linux-arm-gnueabi-g++/qmake.conf

可见,主要是指定编译器相关的参数,如上图红框。

如果你的编译器不是arm-linux-gnueabi-,那么就要作出相应的修改。

如:我的编译器为 arm-linux- 或 arm-none-linux-gnueabi- ,因此需改成如下:

  1 #2 # qmake configuration for building with arm-linux-gnueabi-g++3 #4 5 MAKEFILE_GENERATOR      = UNIX6 CONFIG                 += incremental7 QMAKE_INCREMENTAL_STYLE = sublib8 9 include(../common/linux.conf)10 include(../common/gcc-base-unix.conf)11 include(../common/g++-unix.conf)12 13 # modifications to g++.conf14 QMAKE_CC                = arm-none-linux-gcc15 QMAKE_CXX               = arm-none-linux-g++16 QMAKE_LINK              = arm-none-linux-g++17 QMAKE_LINK_SHLIB        = arm-none-linux-g++18 19 # modifications to linux.conf20 QMAKE_AR                = arm-none-linux-ar cqs21 QMAKE_OBJCOPY           = arm-none-linux-objcopy22 QMAKE_NM                = arm-none-linux-nm -P23 QMAKE_STRIP             = arm-none-linux-strip24 load(qt_config)

2、配置编译参数

此次配置,主要配置安装目录,目标平台,以及一些相关模块组件要不要编译进去。。。qt库配置的项非常多,当然后亦可简化一些选默认

先返回源码目录

$ cd ~/library/qt/qt-everywhere-opensource-src-5.6.2

可输入help大概看下配置的参数有哪些选项:

$ ./configure --help

具体配置如下:

写一个脚本配置进入配置 autoconfig.sh :

#!/bin/sh./configure \
-prefix /usr/local/arm/qt \
-opensource \
-confirm-license \
-release \
-make libs \
-xplatform  linux-arm-gnueabi-g++ \
-pch \
-sql-sqlite \
-qt-libjpeg \
-qt-libpng \
-tslib \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-iconv \
-no-separate-debug-info \
-nomake examples -nomake tools \
-no-pkg-config \
-I /usr/local/arm/tslib/include \
-L /usr/local/arm/tslib/lib

嫌麻烦,直接复制下面命令:

$ ./configure -prefix /usr/local/arm/qt -opensource -confirm-license -release -make libs -xplatform  linux-arm-gnueabi-g++ -pch -sql-sqlite -qt-libjpeg -qt-libpng -tslib -qt-zlib -no-opengl -no-sse2 -no-openssl -no-cups -no-glib -no-iconv -no-separate-debug-info -nomake examples -nomake tools -no-pkg-config -I /usr/local/arm/tslib/include -L /usr/local/arm/tslib/lib

注意:若需要支持触摸屏,记得加上 -tslib 项

配置完成如下:

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/local/arm/qtPrior to reconfiguration, make sure you remove any leftovers from
the previous build.

PS:用qt-everywhere-opensource-src-5.8.0版本时,配置时遇到些奇怪的问题:

Note: No wayland-egl support detected. Cross-toolkit compatibility disabled.
...
ERROR: Feature 'tslib' was enabled, but the pre-condition 'libs.tslib' failed

解决:

之前因为装tslib库的时候没验证,后来发现tslib库有问题,猜测是这个问题而导致的。

重装了tslib库并成功验证,再回来配置同样出现这个问题!!!何解?

尝试过多种方法,亲测最佳:删除5.8版本,下个5.8以下的版本重来。(或者换个高版本工具链可能也许OK)

说明:看到一篇博客,说从qt-5.8开始,编译工具链要支持C++11标准的才行,工具链版本要4.8以上!!!

3、编译

$ make

大概要 2 hour。。。。。。。。。。。。。。。。。。。。。。。去吃个饭睡个觉再回来看看

未完待续,睡觉中ZZZZZZ。。。。

一觉醒来,编译完成:

二、安装

$ make install

安装所需的时间很短,一两分钟即可搞定。

完成后,到prefix指定安装目录看看是否安装成功:

检查目录、时间,均对应上了。

15:03也说明我刚真的睡觉去了哈哈

三、移植至ARM板

QT移植是不是也像其他库一样,将lib目录下的库文件移过去就可以了?

不知道,先试试吧。

lib目录下有150M。

内存不足的可自行进行裁剪,没用到的库就不要移过去了。

像我有内存较任性: (我是挂载NFS文件系统, ./ 是我开发板上的 /lib )

$ cp ../usr/local/qt/lib/lib* ./ -a

四、实例测试

1、编译 hello.cpp 文件:

为测试触摸屏,特意加入个滑动条:

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QSlider>
#include <QHBoxLayout>int main(int argc, char **argv)
{QApplication app(argc, argv);QWidget *window  = new QWidget;window->setWindowTitle("I am a slider");QLabel *label = new QLabel;     // QLabel控件,用于显示数字QSlider *slider = new QSlider(Qt::Horizontal);        // 滑动条slider->setRange(0, 100);QObject::connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));slider->setValue(50);QHBoxLayout *layout = new QHBoxLayout; //level layout->addWidget(label);layout->addWidget(slider);window->setLayout(layout);window->resize(400, 240);window->show();return app.exec();
}

2、交叉编译

因为 Qt 安装在Ubuntu上已设置了环境变量,交叉编译安装的Qt在Ubuntu上就不设环境变量了。

通常,一个程序先在Ubuntu上跑通了再进行交叉编译,上述程序在Ubuntu上顺利通过。

若编译出错:找不到QApplication,则在 .pro 文件最后加上一行(交叉编译同理):

QT += widgets

运行:

交叉编译的命令跟编译能在Ubuntu上运行的相似,只不过没配环境则要手动找出交叉编译的qmake的路径:

$ xxx/bin/qmake -project && xxx/bin/qmake && make   // xxx代表交叉编译安装qt的目录

注意红色,交叉编译的qmake的绝对路径。

最后生成的 “arm-qt” 即可运行文件,将其复制到ARM板上。

3、ARM板上运行

激动的一刻,来吧:

$ ./arm-qt

。。。。。。。。。。。。。。。。。。。。。。。。。。

~ # ./arm-qt
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".Reinstalling the application may fix this problem.
Aborted
~ # 

果然不出所料,又如愿地出错了【捂脸】

这个问题,网上找了好久,没找到答案。。。

然后自己折腾下,依稀记得好像忘了配置环境,会不会因为这个?试下,

/etc/profile添加环境变量 tslib + qt:(其中,前部分是之前移植tslib时已加入)

# touchscreen lib - tslib
export TS_ROOT=/usr/local/tslib
export LD_LIBRARY_PATH=$TS_ROOT/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FDDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=$TS_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TS_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TS_ROOT/lib/ts
# qt
export QT_ROOT=/usr/local/qt
export LD_LIBRARY_PATH=$QT_ROOT/lib/:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export LD_PRELOAD=$TS_ROOT/lib/libts.so

这样一试,还真的是这个问题所致。

期间,还遇到这样一个问题:

~ # ./arm-qt
Couldnt load module pthres
ts_config() failed (No such file or directory)

解决:在最后加入这一行(上面已加)

export LD_PRELOAD=$TS_ROOT/lib/libts.so

扫清一切障碍之后,终于迎来光明了:

拖动滑动条数字会跟着变,说明一切正常。

搞了几天,终于可以打卡收摊。

-------- 2018-04-30 21:27

Ubuntu下交叉编译Qt库并移植至ARM板上相关推荐

  1. 最新版ser2net移植到ARM板上,交叉编译

    这个是ser2net源码http://sourceforge.net/projects/ser2net/files/latest/download ser2net是我在玩openwrt时接触的,当时用 ...

  2. wxX11移植到arm板上

    [原]移植wxX11到开发板上 2012-5-18阅读467 评论0 最近几天由于工作安排,要将wxX11程序移植到arm开发板上.一连工作了好几天,终于可以在板子上显示出一个"X" ...

  3. wxX11移植到arm板上(序)

    在将wxX11里在程序在arm板子上运行之后,我们发现那上面的程序运行的时候没有边框和标题栏.于是我们就找这方面的解决方法.首先在tinyx里找到了一个窗口管理器twm,当把twm交叉编译完以后,拷到 ...

  4. Qt程序在arm板上运行

    1.Qt中的库需要拷贝到arm板上: 2.配置环境变量,参考该文. 总结: 1.可执行程序在终端中运行前,需要配置好环境变量,我们用export的形式配置的,这种形式只在当前终端中生效(因为,如果我们 ...

  5. Ubuntu下嵌入式Qt开发环境配置全攻略

    本文以友善之臂的Mini6410嵌入式开发板为目标板,介绍ubuntu 12.04系统下,配置嵌入式Qt开发工具的过程.本文中介绍的工具.大部分步骤和脚本来自开发板附带资料光盘,但其默认配置环境为老旧 ...

  6. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

  7. ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三)

    ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三) 要检测出人脸并且还要识别出这个人是谁,就得用到人脸算法,这个算法如果你足够牛X的话可以自己写出来,当然,如果像我一样是个小菜鸟的话就得领悟 ...

  8. Ubuntu下安装Qt全部过程

    Ubuntu下安装Qt全部过程 (2013-03-04 22:12:02) 转载▼   分类:ARM Linux 1.到官网http://qt-project.org/downloads或者ftp:/ ...

  9. ubuntu下交叉编译环境构建

    ubuntu下交叉编译环境构建(arm-linux-gcc-3.4.1.tar.bz2 ) 下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下. arm-linux-gcc-3. ...

  10. Ubuntu下编译qt程序libQtWebEngineCore报错

    最近在Ubuntu下编译qt程序时, 报如下错误 libQt5WebEngineCore.so: .dynsym local symbol at index 3 (>= sh_info of 3 ...

最新文章

  1. 3D点云two-stage目标检测方法优化综述
  2. spring控制并发数的工具类ConcurrencyThrottleSupport和ConcurrencyThrottleInterceptor
  3. TurboMail邮件服务器荣膺“2012年度中国行业信息化最佳产品奖”
  4. kindeditor用法简单介绍(转)
  5. Shiro框架原理及应用分析
  6. 6999元!红魔6S Pro推出战地迷彩主题限定套装:11月1日正式开售
  7. tomcat上传文件,重新加载后删除以及在web.xml中配置全局路径
  8. angular发布代码有缓存_如何在Angular应用程序中执行请求?
  9. 为什么开发移动端web不使用jQuery
  10. 使用树莓派3获取CPU温度
  11. ML Case Studies(0)
  12. 一维码和二维码相关知识
  13. 计算机控制面板设置命令,控制面板在哪里打开?快捷键是多少(最全4种方法详解)...
  14. 生活杂谈-简单电器维修知识-2
  15. Java Shadowing 影子变量 影子声明
  16. 北京住房公积金提取(取消)指南
  17. 一、MacBook Pro 使用eGPU-WTG篇,mac告别虚拟机
  18. ps还原上一步快捷键,ps还原上一步快捷键_photoshop恢复上一步操作的快捷键是什么...
  19. Java高并发和多线程的面试笔试题——稳拿offer
  20. C/C++学习笔记-指针数组、数组指针

热门文章

  1. 2022-2023 物联网毕业设计选题推荐
  2. html边界填充边框,CSS边界与填充
  3. Python书写格式
  4. 如何快速让网站发布的文章被百度收录
  5. cups共享linux打印机_Linux使用CUPS实现网络打印机
  6. 中文名颜色大全,妈妈再也不担心我找不着好颜色了.
  7. 厦门大学计算机考研复试线2021,【厦门大学】2021考研复试分数线3月13日已公布!速看!...
  8. 迪文屏用c语言控制按键触发,用迪文屏模拟了个加密键盘功能
  9. python爬虫读后感-学习爬虫的感想和心得
  10. 2017年囧事大全,全部真人真事