首页
博客
研修院
VIP
APP
问答
下载
社区
推荐频道
活动
招聘
专题
打开CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
打开APP
2020-08-09 23:17:27
求佛_ce123
码龄12年
关注
GUI的一般架构
图形用户界面GUI(Graphics User Interface)是迄今为止计算机系统中最为成熟的人机交互技术。一个好的图形用户界面的设计不仅要考虑到具体硬件环境的限制,而且还要考虑到用户的喜好等。
由于图形用户界面的引入主要是从用户角度出发的,因此用户自身的主观感受对图形用户界面的评价占了很大比重,比如,易用性、直观性、友好性,等等。另外,从纯技术的角度看,仍然也会有一些标准需要考虑,比如,跨平台性、对硬件的要求等。在嵌入式系统开发和应用中,我们所考虑的问题主要集中在图形用户界面对硬件的要求,以及对硬件类型的敏感性方面,在提供给用户的最终界面方面只是要求简单实用就够了。
虽然不同的GUI系统因为其使用场合或服务目的不同,具体实现互有差异,但是总结起来,一般在逻辑上可以分为以下几个模块:底层I/O设备驱动(显示设备驱动、鼠标驱动、键盘驱动等)、基本图形引擎(画点、画线、区域填充)、消息驱动机制、高层图形引擎(画窗口、画按钮),以及GUI应用程序接口(API)。
底层I/O设备驱动,例如,显示驱动、鼠标驱动、键盘驱动等构成了GUI的硬件基础。由于此类设备的多样性,需要对其进行抽象,并提供给上层一个统一的调用接口;而各类设备驱动则自成一体,形成一个GUI设备管理模块。当然,从 *** 作系统内核的角度看,GUI设备管理模块则是 *** 作系统内
文章知识点与官方知识档案匹配
CS入门技能树Linux入门初识Linux
26057 人正在系统学习中
点击阅读全文
订阅专栏 解锁全文
打开CSDN APP,看更多技术内容
ARM9嵌入式Linux开发-嵌入式Linux开发环境构建
目录 1、嵌入式Linux开发简介 1.1嵌入式系统 1.2嵌入式 *** 作系统简介 1.2.1嵌入式 *** 作系统的发展 1.2.2几种代表性嵌入式 *** 作系统 1.3嵌入式Linux简介 2、搭建嵌入式Linux开发环境 2.1基本概念 主机系统和目标系统 交叉编译 2.2软件安装及使用 3、基本的Makefile语法 3.1最基本的Makefile文件 3.2MakeFile简介...
继续访问
基于ARM-LINUX嵌入式GUI的研究与开发.pdf
基于ARM-LINUX嵌入式GUI的研究与开发.pdf
基于ARM嵌入式系统GUI开发研究
随着嵌入式系统的发展,它在软件和硬件上日趋复杂,对于人机交互的效率的要求也日渐提高,特别是一些复杂的工控设备和消费电子产品。因此,图形用户界面(GUI)就从嵌入式系统的系统程序中被独立了出来。嵌入式GUI发展至今,已经有了许多的种类,具有了强大的功能。嵌入式GUI已经成为一个成功的嵌入式系统不可缺少的组成部分[1]。本文在ARM为的嵌入式系统上进行了图形界面的开发,并对Windows界面进行了模拟。 1 ARM处理器 嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物。嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功
《嵌入式设计及Linux驱动开发指南——基于ARM9处理器》读书笔记
嵌入式设计及Linux驱动开发指南——基于ARM9处理器》 读书笔记 第一章嵌入式系统基础 1、 嵌入式系统定义: “嵌入式系统是用来控制或者监视机器、装置、工厂等大规模系统的设备。” ——电气工程师协会 “嵌入到对象体系中的专用计算机系统” ——北京航空航天大学何立民教授 “嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。 2、 嵌入式 *** 作系统: 硬实时系统有一个
继续访问
chengdongyue的笔记
---------------------------------------- Linux 基础 --------------------------------1.Linux的诞生 1.unix两大分支:BSD和system V 2.GUN计划:允许软件自由复制更改移植 3.Linux发行版本:red_hat(red_hat) Debian(ubuntu) 系列 4...
继续访问
DOS工控界面开发-图形用户界面
eCGUI功能特性介绍 eCGUI=微型16/32位嵌入式GUI,自主开发,历时四年左右,拥有全部版权.体积小巧 大小在 100KB~180KB!特性: 多窗口支持| 完全中文输入/显示| 多数常用GUI控件| 99.9% ANSI C 编写| 已成功移植 DOS,Linux,uc/OS-II| 组
继续访问
适合arm9的linux图形,ARM9+Linux平台上计算机视觉的实现.pdf
总第266期 计算机与数字工程 VoI.39No.122011年第12期 Computer&DigitalEngineering 134马智叶林葛俊锋(华中科技大学控制科学与工程系武汉430074)摘要文章以在ARM9+Linux平台上实现人脸检...
继续访问
最新发布 在Linux下开发GUI程序的方法
AWT是AbstractWindowToolkit(抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口,与wxWidgets类似,因此具有相对比较高的运行效率。GTK+是基于GLib构建的,其中GLib是一个通用的C语言库,类似于C++中的STL,提供了对动态数组、链表、队列、散列表、平衡二叉树、线程 *** 作和XML解析等功能。,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的Swing/AWT组件也可以用于开发Linux下的GUI应用。...
继续访问
嵌入式系统/ARM技术中的嵌入式系统中的GUI开发
作者:穆煜,华清远见嵌入式培训中心讲师近年来手持式设备、消费类电子产品得到了飞速的发展。随着这些产品用户的增多,对其用户界面也提出了越来越多的要求。在这类产品刚进入市场的时候,例如,手机、PDA、数字机顶盒等,这类产品的用户界面都比较单一,而到了今天,我们可以看到,在市场销售的这些电子产品都具有漂亮的图形用户界面,甚至要求能够支持全功能的浏览器,使得用户能够随时随地进行网络信息的浏览。但是,由于消费类电子的成本敏感性特点,这些产品大多数希望建立在一个有限占用系统资源的轻量级GUI系统之上,这与 PC机中 GUI 系统有根本性的区别。 另外一个轻量级GUI系统的需求存在于工业控制领域、
嵌入式系统/ARM技术中的基于Linux的轻量级嵌入式GUI系统及实现
1、引言 近年来,随着信息家电、手持设备、无线设备的迅速发展,人们对嵌入式系统的需求逐渐增多,要求也越来越高。这使为嵌入式系统提供一个友好方便、稳定可靠的G UI系统成为非常紧迫要求[5]。嵌入式技术是当前微电子与计算机技术中的一个重要分支[1], 它是指以应用为中心, 以计算机技术为基础,软件、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等的严格要求的专用计算机系统[2]。常用的PC机上的GU I因嵌入式设备对资源的严格要求显得过于庞大,而不适合嵌入式系统[6]。与普通环境下的GUI 系统相比较.嵌入式环境下的GUI 系统要求轻型、占用资源少、高性能、高可靠性、可配置等。同
从ARM9到A15 手机处理器架构进化历程
手机中国 【原创】 作者:手机中国 徐磊 责任编辑:白沫飞 2012年04月13日 05:30 随着智能手机越来越普及,消费者在选购手机的时候也越来越理性化,除了关心价格和外观之外,手机的性能也成为了人们最关心的因素,大家都知道,处理器是影响手机性能的最关键的因素,像德州仪器、高通、英伟达以及三星等主流的处理器厂商,大家都已经耳熟能详。 随着智能手机越来越普及,消费者在选购手机的
继续访问
基于KEIL4开发ARM9(S3C2440)的裸机程序
本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序。 说明: 一、平台: *** 作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二、建立工程: 1、新建工程,选择S3C2440A处理器: ...
继续访问
ARM9嵌入式Linux开发-Linux基础知识
目录 1 Linux简介 1.1 Linux的内核版本 1.2 Linux的发展历史 1.3 Linux的发行版本 1.4 Linux内核源码目录结构 2 Linux内核的配置和编译 2.1 Linux的配置 2.2 Linux内核的编译 2.2.1 Linux的Makefile体系 2.2.2 Linux内核文件编译 2.2.3 Makefile如何决定编译哪些文件 2.3.4 Makefile是怎样编译这些文件的? 2.3.5 Makefile是怎样连接这些文件 2...
继续访问
linux-arm9显示图片程序,Linux和ARM9下视频图像采集与显示系统设计
摘要:随着嵌入式系统的逐步发展, 实现在嵌入式系统上的视频采集与显示能够提高嵌入式的应用范围与实用性.基于这个目的, 设计了基于S3C2440控制芯片、Linux *** 作系统的视频采集与显示系统, 对PAL制式的模拟摄像头进行信号采集和解码, 然后显示在LCD显示屏上.根据视频显示测试结果, 该系统具有稳定性好、可移植等优点, 在生产生活中有较高的实用价值.关键词:嵌入式系统ARM-Linux...
继续访问
ARM9嵌入式Linux开发-开篇
将自己之前学习嵌入式开发的一些资料整理出来。这些文章适合入门,文章中涉及的一些工具比较老(暂时不去更新了),但不影响对嵌入式开发技术本质的思考和理解。博主目前的工作主要系统框架和中间件的开发,感兴趣的朋友可以一起进行讨论和交流。 当今社会,嵌入式系统已经渗透到人们工作、生活中的各个领域。而嵌入式Linux系统也蓬勃发展,不仅继承了Linux源码开放、内核稳定高效、软件丰富等优势,...
继续访问
ARM GUI画线函数
嵌入式系统中GUI中在1pixel基础上绘制粗线(3 pixel)
ARM ucGUI界面模拟器
本压缩文档提供了一个基于VC++的ucGUI模拟器及例子程序
eCGUI 0.3 for Linux-ARM 嵌入式GUI
微型16/32位嵌入式GUI,自主开发,历时四年左右,拥有全部版权. 最新增加对JPEG图像支持!!! 最新动态 http://www.ecgui.com 联系: ecgui.com@gmail.com 体积小巧 大小在 100KB~180KB! 特性: 多窗口支持| 完全中文输入/显示| 多数常用GUI控件| 99.9% ANSI C 编写| 已成功移植 DOS,Linux,uc/OS-II| 组件式 API(易用,高效) 目前可以使用的控件有: MainWindow 主窗口 DialogWindow 对话窗口 Button 按钮,多种风格 TextBox 单行文本框,可设置字体,背景颜色等 完全简体中文输入/显示/编辑 支持 EditBox 多行文本框,可设置字体,背景颜色等 完全简体中文输入/显示/编辑 支持 HScrollBar 横向 滚动条 VScrollBar 竖向 滚动条 SelectBox 列表选择框 MainMenu 主菜单 PopMenu d出式菜单 Combobox 组合框 ChoiceBox,CheckBox 单/多选框 Label 文字标签 -------------- 这个包适用于 三星ARM9 2440
热门推荐 主流嵌入式开源GUI比较
本文主要说明了MicroWindows、MiniG、QT、GTK+、OpenGUI和FLTK,第七小节是对比的详细表格,内容是根据网上的一些资料还有各大开源GUI的官网的资料整理而来,目的是为自己以后学习把握方向。
继续访问
数据库课程设计
c语言文件读写 *** 作代码
html+css+js网页设计
写评论
评论
2
点赞
踩
分享
前往
1,先下载最新版本的gdb源代码包,我使用的是gdb-7.6.tar.gz,使用tar命令进行解包(tar -xvzf gdb-7.6.tar.gz),cd进gdb-7.6/gdb目录,使用vi找到remote.c中的如下代码:if(buf_len >2 * rsa->sizeof_g_packet)
error(_("Remote 'g' packet reply is too long: %s"),rs->buf)
将上面两行注释掉,添加如下代码
if(buf_len >2 * rsa->sizeof_g_packet)
{
rsa->sizeof_g_packet = buf_len
for(i = 0i <gdbarch_num_regs(gdbarch)i++)
{
if(rsa->regs[i].pnum == -1)
continue
if(rsa->regs[i].offset >= rsa->sizeof_g_packet)
rsa->regs[i].in_g_packet = 0
else
rsa->regs[i].in_g_packet = 1
}
}
使用如下命令对代码进行配置、编译和安装
./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
make
make install
2,gdbserver使用android4.2模拟器中自带的版本(v7.1)
3,将NDK编译好的C/C++可执行程序,上传到模拟器中/data/test目录下,假设可执行程序的名称为testHello。
4,使用命令:gdbserver :7000 /data/test/testHello 启动模拟器端的调试。
5,启动arm-linux-gdb之前,使用vi打开~/.bash_profile文件,在其中添加:
export PATH=$PATH:/usr/local/arm-gdb/bin,以便在程序的其他目录可以直接启动arm-linux-gdb程序
6,cd至ndk编译好的testHello文件所在目录
7,使用如下命令进行端口映射:adb forward tcp:7000 tcp:7000,将模拟器的7000端口和本机的7000端口进行映射
8,使用命令:arm-linux-gdb testHello启动gdb调试
9,使用target remote :7000 链接模拟器中gdbserver启动的服务。
10,自此,我们就可以使用gdb命令进行代码调试了。
准备工作:首先,最不可思议的,是要在Linux下把QT编译一遍,因为库都是一样的,需要的就是一些Windows下的qmake、moc、uic之类的工具而已。因为QT源码很多地方不能在Windows下面交叉编译通过,虽然我改了一些代码和配置(一会儿我贴出补丁来),但我只用它编译了qtbase、qtdeclarative这两个模块和qttools模块中的一部分。
Linux下的编译可以参照我之前写的这篇文章。参考配置:
开发包:
./configure -extprefix /opt/qt/5.2.1/arm -prefix /usr -plugindir /usr/lib/qt/plugins -importdir /usr/lib/qt/imports -qmldir /usr/lib/qt/qml -make libs -xplatform linux-arm-gnueabi-g++ -opengl es2 -confirm-license -opensource -xcb -xinput2 -nomake examples -nomake tests -qt-zlib -qt-xcb -dbus -largefile -cups -no-fontconfig -glib -gtkstyle -qt-freetype -sysroot /opt/sysroot-arm -mysql_config /opt/sysroot-arm/usr/bin/mysql_config -v
运行库:
./configure -prefix /usr -plugindir /usr/lib/qt/plugins -importdir /usr/lib/qt/imports -qmldir /usr/lib/qt/qml -make libs -xplatform linux-arm-gnueabi-g++ -opengl es2 -confirm-license -opensource -xcb -xinput2 -nomake examples -nomake tests -qt-zlib -qt-xcb -dbus -largefile -cups -no-fontconfig -glib -gtkstyle -qt-freetype -sysroot /opt/sysroot-arm -mysql_config /opt/sysroot-arm/usr/bin/mysql_config -v
做完这一步,你获得两样东西,sysroot和linux下的ARM QT开发文件。sysroot是编译QT之前,用Buildroot做的开发用根目录。这两个东西都要拷贝到Windows里,因为Windows不支持符号连接,拷贝需要需要去掉这些连接,这么做:
cp [源目录] [目标目录] -Lr
第二,需要一个Windows下模拟Linux环境的东西和编译器,我用的是MSYS和MinGW,因为他们编译出来的程序比Cygwin快。在这里可以找到:http://www.mingw.org/。
第三,需要Linaro ARM GCC编译器,Windows版本的。在这里可以找到:http://www.linaro.org/downloads/
第四,需要Python,Windows版本的。在这里可以找到:https://www.python.org/downloads/
下载、安装,然后在MSYS根目录的/etc/profile里面export PATH=$PATH:[Python安装目录]
第五,需要pkg-config,Windows版本的,这个比较麻烦,需要下载以下三个文件,并提取出我们需要的东西:
http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip
(提取pkg-config.exe)
http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.28/glib_2.28.8-1_win32.zip
(提取libglib-2.0-0.dll)
http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.zip (提取intl.dll)
把他们都放到MSYS的bin目录下,然后给pkg-config.exe做一个脚本pkg-config,因为下载的pkg-config.exe比较蠢,在同时指定PKG_CONFIG_SYSROOT_DIR和PKG_CONFIG_LIBDIR这两个环境变量的时候,第一个cflags会输出两次PKG_CONFIG_SYSROOT_DIR。这么做这个脚本:
#!/bin/sh
pushd / >/dev/null
ROOTDIR=`pwd -W 2>/dev/null`
popd >/dev/null
SYSROOT=$PKG_CONFIG_SYSROOT_DIR
pkg-config.exe "$@" | sed "s#$SYSROOT$SYSROOT#$SYSROOT#g" | sed "s#$ROOTDIR##g"
最后去掉$ROOTDIR前缀是为了和Linux Makefile兼容,同时也不会影响在make中的地址转换,最后,QT源码和我的补丁。
我的补丁如下:
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qtbase/configure qt-everywhere-opensource-src-5.2.1/qtbase/configure
--- qt-everywhere-opensource-src-5.2.1-old/qtbase/configure 2014-02-02 04:37:23 +0800
+++ qt-everywhere-opensource-src-5.2.1/qtbase/configure 2014-08-27 22:34:47 +0800
@@ -4022,6 +4022,10 @@
done
(cd "$outpath/qmake""$MAKE") || exit 2
+if [ -e "$outpath/bin/qmake.exe" ]then
+ echo '#!/bin/sh' >"$outpath/bin/qmake"
+ echo "$outpath/bin/qmake.exe" '"$@"' "-unix" >>"$outpath/bin/qmake"
+fi
fi # Build qmake
echo "Running configuration tests..."
@@ -4091,9 +4095,9 @@
# when xcompiling, check environment to see if it's actually usable
if [ -z "$PKG_CONFIG_LIBDIR" ]then
if [ -n "$CFG_SYSROOT" ] &&[ -d "$CFG_SYSROOT/usr/lib/pkgconfig" ]then
-PKG_CONFIG_LIBDIR=$CFG_SYSROOT/usr/lib/pkgconfig:$CFG_SYSROOT/usr/share/pkgconfig
+PKG_CONFIG_LIBDIR=$CFG_SYSROOT/usr/lib/pkgconfig\$CFG_SYSROOT/usr/share/pkgconfig
if [ -n "$GCC_MACHINE_DUMP" ]then
-PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:$CFG_SYSROOT/usr/lib/$GCC_MACHINE_DUMP/pkgconfig
+PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR\$CFG_SYSROOT/usr/lib/$GCC_MACHINE_DUMP/pkgconfig
fi
export PKG_CONFIG_LIBDIR
echo >&2 "Note: PKG_CONFIG_LIBDIR automatically set to $PKG_CONFIG_LIBDIR"
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf qt-everywhere-opensource-src-5.2.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
--- qt-everywhere-opensource-src-5.2.1-old/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 2014-02-02 04:37:37 +0800
+++ qt-everywhere-opensource-src-5.2.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 2014-08-28 00:08:34 +0800
@@ -11,14 +11,21 @@
include(../common/g++-unix.conf)
# modifications to g++.conf
-QMAKE_CC= arm-linux-gnueabi-gcc
-QMAKE_CXX = arm-linux-gnueabi-g++
-QMAKE_LINK = arm-linux-gnueabi-g++
-QMAKE_LINK_SHLIB= arm-linux-gnueabi-g++
+QMAKE_CC= arm-linux-gnueabihf-gcc
+QMAKE_CXX = arm-linux-gnueabihf-g++
+QMAKE_LINK = arm-linux-gnueabihf-g++
+QMAKE_LINK_SHLIB= arm-linux-gnueabihf-g++
# modifications to linux.conf
-QMAKE_AR= arm-linux-gnueabi-ar cqs
-QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy
-QMAKE_NM= arm-linux-gnueabi-nm -P
-QMAKE_STRIP = arm-linux-gnueabi-strip
+QMAKE_AR= arm-linux-gnueabihf-ar cqs
+QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
+QMAKE_NM= arm-linux-gnueabihf-nm -P
+QMAKE_STRIP = arm-linux-gnueabihf-strip
+
+# support for OpenGL
+QMAKE_LIBS_EGL = -lEGL
+QMAKE_LIBS_OPENGL_ES1 = -lGLES_CM
+QMAKE_LIBS_OPENGL_ES2 = -lGLESv2
+#QMAKE_LIBS +=
+
load(qt_config)
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qtbase/qmake/generators/makefile.cpp qt-everywhere-opensource-src-5.2.1/qtbase/qmake/generators/makefile.cpp
--- qt-everywhere-opensource-src-5.2.1-old/qtbase/qmake/generators/makefile.cpp 2014-02-02 04:37:29 +0800
+++ qt-everywhere-opensource-src-5.2.1/qtbase/qmake/generators/makefile.cpp 2014-08-26 13:53:15 +0800
@@ -1161,8 +1161,8 @@
QString srcf = (*sit).toQString()
QString dstf = (*oit).toQString()
-t <<escapeDependencyPath(dstf) <<": " <<escapeDependencyPath(srcf)
- <<" " <<escapeDependencyPaths(findDependencies(srcf)).join(" \\\n\t\t")
+t <<escapeDependencyPath(dstf).replace(QRegExp("\\\\"), "/") <<": " <<escapeDependencyPath(srcf).replace(QRegExp("\\\\"), "/")
+ <<" " <<escapeDependencyPaths(findDependencies(srcf)).replaceInStrings(QRegExp("\\\\"), "/").join(" \\\n\t\t")
ProKey comp, cimp
for(QStringList::Iterator cppit = Option::cpp_ext.begin()cppit != Option::cpp_ext.end()++cppit) {
@@ -3346,6 +3346,8 @@
QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QString &src, const QString &dst)
{
QString ret
+ QString src_p = src
+ QString dst_p = dst
if (project->isEmpty(replace_rule)
|| project->isActiveConfig("no_sed_meta_install")) {
ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\""
@@ -3362,7 +3364,7 @@
+ "," + windowsifyPath(replace.toQString()) + ",gi")
}
}
-ret += " \"" + src + "\" >\"" + dst + "\""
+ret += " \"" + src_p.replace(QRegExp("\\\\"), "/") + "\" >\"" + dst_p.replace(QRegExp("\\\\"), "/") + "\""
}
return ret
}
struct TermChain {
TermChain(PatternTerm term)
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lrelease/lrelease.pro qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lrelease/lrelease.pro
--- qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lrelease/lrelease.pro 2014-02-02 04:37:57 +0800
+++ qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lrelease/lrelease.pro 2014-08-28 10:42:55 +0800
@@ -1,4 +1,7 @@
option(host_build)
+
+win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
+
QT = core-private
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
diff -Naur qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lupdate/lupdate.pro qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lupdate/lupdate.pro
--- qt-everywhere-opensource-src-5.2.1-old/qttools/src/linguist/lupdate/lupdate.pro 2014-02-02 04:37:57 +0800
+++ qt-everywhere-opensource-src-5.2.1/qttools/src/linguist/lupdate/lupdate.pro 2014-08-28 10:46:59 +0800
@@ -1,4 +1,7 @@
option(host_build)
+
+win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
+
QT = core-private
qtHaveModule(qmldevtools-private) {
接下来开始配置:
其中-extprefix定义安装位置,在编译完以后可以改,一会儿说;-prefix、-plugindir、-importdir、-qmldir定义的位置是目标板上的位置,加双斜杠是为了防止MSYS翻译这些路径成MSYS的路径,其他的设定与Linux下的编译没有不同。Linux下编译的sysroot可以拷贝到例如:E:/MinGW/opt/sysroot-arm。
然后编译
make module-qtbase
make module-qtdeclarative
cd qttools/src/linguist
../../../qtbase/bin/qmake.exe -unix linguist.pro
make
编译的时候可能会有几个库有链接错误,找不到一大堆gl、egl打头的函数,这是因为相应的Makefile里面的LIBS没有自动加上-lEGL -lGLES_CM -lGLESv2;但是正式使用qmake的时候不会,很奇怪;因为也就几个地方,出问题了手工加一下吧,我没去查原因改代码。
编译linguist的时候可能会遇到这个问题:http://qt-project.org/forums/viewthread/33370,按里面说的处理。
编译完了以后,把下列文件拷贝到Linux下编译的ARM QT开发包的bin目录中去:
然后,删掉对应的ARM QT开发包的bin目录中没有exe后缀的文件,那些是Linux下的。
最后一步,确保安装路径正确,也就是说,如果配置Windows下QT的时候设定-extprefix E:/MinGW/opt/qt/5.2.1/arm,那就要把替换过exe文件的ARM QT开发包放到这个位置,如果路径改了,可以用二进制搜索工具去qmake.exe中替换这个字串。
补充一下关于调试的问题,其实不是很关键。
在使用Debug模式编译的时候,最后会出现如下提示:
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB. Attempting to continue with the default i386 settings.
这是因为在mkspecs/features/unix/gdb_dwarf_index.prf中,有这样一段:
QMAKE_GDB_INDEX += \
test \$\$(gdb --version | sed -e \'s,[^0-9][^0-9]*\\([0-9]\\)\\.\\([0-9]\\).*,\\1\\2,q\') -gt 72 &&\
gdb --nx --batch --quiet -ex \'set confirm off\' -ex \"save gdb-index $$QMAKE_GDB_DIR\" -ex quit \'$(TARGET)\' &&\
test -f $(TARGET).gdb-index &&\
$$QMAKE_OBJCOPY --add-section \'.gdb_index=$(TARGET).gdb-index\' --set-section-flags \'.gdb_index=readonly\' \'$(TARGET)\' \'$(TARGET)\' &&\
$$QMAKE_DEL_FILE $(TARGET).gdb-index || true
很显然,这段代码把调试用的GDB默认为“gdb”了,所以应该改成你用的gdb,比如arm-linux-gnueabihf-gdb。另外,这里的sed对GDB版本的判断,无法识别像“GNU gdb (Sourcery CodeBench Lite 2014.05-29) 7.7.50.20140217-cvs”这样的版本信息的,只能识别像“GNU gdb (GDB) 7.6.1”这样的版本信息,所以你有可能看不到刚才那段提示。想解决,要么重新写一段sed的正则表达式,要么直接就把这个test ... -gt 72删掉。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)