热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

友善之臂的qtopia2.2.0加入多线程支持

本文章基于友善之臂提供的arm版本的qtopia2.2.0和x86版本的qtopia2.2.0,前提是系统中已经安装好交叉编译器。要实现多线程,主要是要获得带多线程支持的动态链接库libqte-

本文章基于友善之臂提供的arm版本的qtopia2.2.0和x86版本的qtopia2.2.0,前提是系统中已经安装好交叉编译器。
要实现多线程,主要是要获得带多线程支持的动态链接库libqte-mt.so.2,libqte-mt.so.2需要通过编译qt获得,下面是编译libqte-mt.so.2的方法(arm和x86版本方法类似,一起叙述)。
1) 将友善之臂提供的qt源码解压,按照友善之臂手册利用build-all脚本完成一次编译。

arm版本解压后的路径为:/opt/ARM/arm-qtopia/

x86版本解压后的路径为:/opt/ARM/x86-qtopia/

2) arm 版本执行如下命令:
cd  /opt/ARM/arm-qtopia/qtopia-2.2.0-FriendlyARMsource  setQteEnv
cd qt2
make clean
echo yes | ./configure -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -qt-zlib -qt-libpng -gif -no-g++-exceptions -no-qvfb -xplatform linux-arm-g++ -tslib –thread

x86版本执行如下命令:

cd  /opt/ARM/x86-qtopia/qtopia-2.2.0-FriendlyARM
source setQteEnv
cd qt2
make clean
echo yes|./configure -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -gif -thread
3) 上面的步骤执行后会在qt2目录下产生 src-mt.mk文件。

用编辑器将其内容的最后一行”cd src; $(MAKE) clean“删除或注释掉;

SHELL=/bin/sh

src-mt:
cd src; $(MAKE) 'QT_THREAD_SUFFIX=-mt'
'QT_LFLAGS_MT=$$(SYSCONF_LFLAGS_THREAD) $$(SYSCONF_LIBS_THREAD)'
'QT_CXX_MT=$$(SYSCONF_CXXFLAGS_THREAD) -DQT_THREAD_SUPPORT'
'QT_C_MT=$$(SYSCONF_CFLAGS_THREAD) -DQT_THREAD_SUPPORT'
cd examples/guithreads; $(MAKE) 'QT_THREAD_SUFFIX=-mt'
'QT_LFLAGS_MT=$$(SYSCONF_LFLAGS_THREAD) $$(SYSCONF_LIBS_THREAD)'
'QT_CXX_MT=$$(SYSCONF_CXXFLAGS_THREAD) -DQT_THREAD_SUPPORT'
'QT_C_MT=$$(SYSCONF_CFLAGS_THREAD) -DQT_THREAD_SUPPORT'
cd examples/semaphores; $(MAKE) 'QT_THREAD_SUFFIX=-mt'
'QT_LFLAGS_MT=$$(SYSCONF_LFLAGS_THREAD) $$(SYSCONF_LIBS_THREAD)'
'QT_CXX_MT=$$(SYSCONF_CXXFLAGS_THREAD) -DQT_THREAD_SUPPORT'
'QT_C_MT=$$(SYSCONF_CFLAGS_THREAD) -DQT_THREAD_SUPPORT'
cd src; $(MAKE) clean
4)执行如下命令:
make  src-mt

5)如果在如上编译过程中提示 qtextcodec.cpp 编译错误,将 /opt/ARM/new-qtopia/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/src/tools/qtextcodec.cpp 改成下面的代码:( 2148-2180 行)
#define QT_NO_EUCJPCODEC
#ifndef QT_NO_EUCJPCODEC
(void)new QEucJpCodec;
#endif
#define QT_NO_SJISCODEC
#ifndef QT_NO_SJISCODEC
(void)new QSjisCodec;
#endif
#define QT_NO_JISCODEC
#ifndef QT_NO_JISCODEC
(void)new QJisCodec;
#endif
#define QT_NO_EUCKRCODEC
#ifndef QT_NO_EUCKRCODEC
(void)new QEucKrCodec;
#endif
#define QT_NO_GBKCODEC
#ifndef QT_NO_GBKCODEC
(void)new QGbkCodec;
#endif
#define QT_NO_BIG5CODEC
#ifndef QT_NO_BIG5CODEC
(void)new QBig5Codec;
#endif
#define QT_NO_RTLCODEC
#ifndef QT_NO_RTLCODEC
(void)new QArabicCodec;
(void)new QHebrewCodec;
#endif
#define QT_NO_TSCIICODEC
#ifndef QT_NO_TSCIICODEC
(void)new QTsciiCodec;
#endif

6)对于arm版本,在/opt/ARM/arm-qtopia/qtopia-2.2.0- FriendlyARM/qtopia/lib目录下生成所期待的libqte-mt.so.2.3.12文件,将libqte-mt.so.2.3.12 改为libqte-mt.so.2,放入开发板/lib文件夹下。
x86版本需要修改/etc/ld.so.conf如下,并执行ldconfig指令。如果不修改的话,在后面的程序执行过程中,会提示找不到libqte-mt.so.2动态链接库。

include ld.so.conf.d/*.conf
/opt/ARM/x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/lib
/opt/ARM/x86-qtopia/qtopia-2.2.0-FriendlyARM/qt2/lib

下面以一个例子来说明如何使用多线程编程。
创建如下文件:
example.pro   //项目文件main.cpp      //main函数文件
example.cpp //例子程序
example.h //例子程序头文件
arm-build //编译arm版本可执行文件的脚本
x86-build //编译x86版本可执行文件的脚本
run //在x86上运行程序的脚本
example.pro
CONFIG		+= qtopiaappCONFIG		-= buildQuicklaunchCONFIG          += qt warn_on release threadDESTDIR	         = $(PWD)HEADERS	+= example.hSOURCES	+= example.cppSOURCES	+= main.cppTARGET   = exampleunix:LIBS += -lm -L/lib 

main.cpp

#include 
#include
#include
#include

#include "example.h"

int main(int argc,char *argv[])
{
QPEApplication a(argc,argv);

ExampleThread myThread;
myThread.start();

return a.exec();
}

example.cpp
#include "example.h"ExampleThread::ExampleThread(){}ExampleThread::~ExampleThread(){}void ExampleThread::run(){	while(1)	{		printf("example\n");		sleep(1);	}}
example.h
#ifndef EXAMPLE_H#define EXAMPLE_H#include #include #include #include #include #include #include #include #include class Q_EXPORT ExampleThread : public QObject,public QThread{Q_OBJECTsignals:    void	ExampleSignal();public:	ExampleThread();	~ExampleThread();protected:virtual void run();};#endif //EXAMPLE_H
arm-build
#!/bin/bashsource /opt/ARM/arm-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv qmake -spec /opt/ARM/arm-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/mkspecs/qws/linux-arm-g++ -o Makefile *.pro make cleanmake
x86-build
#!/bin/bashsource /opt/ARM/x86-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv qmake -o Makefile -spec /opt/ARM/x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/mkspecs/qws/linux-generic-g++ *.pro make cleanmake
run
#!/bin/shexport ApplicatiOnDir=$PWD/opt/ARM/x86-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/qvfb -width 320 -height 240 -depth 16 &#export CAMERA_DEVICE=/dev/video1#qtopia-2.2.0-FrinedlyARM/qt2/bin/qvfb -width 640 -height 480 -depth 16 &cd /opt/ARM/x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/imagemkdir root 2>/dev/null || trueexport HOME=$PWD/rootcd opt/Qtopiaexport PATH=$PWD/bin:$PATHexport LD_LIBRARY_PATH=$PWD/lib:$LD_LIBARAY_PATHexport QTDIR=$PWDexport QPEDIR=$PWDexport KDEDIR=$PWD/../kdesleep 3$ApplicationDir/example -qws

arm-build,x86-build,run三个脚本添加可执行权限,运行
./x86-build./run
如果能够不停的输出example,则表示x86版本添加多线程支持成功

执行arm-build,编译成arm版本的程序,复制到开发板上执行,如果也能输出example,表示arm版本添加多线程支持成功
( 为使qt支持输出调试信息到串口,修改 /bin/qtopia 文件最后一行为 exec $QPEDIR/bin/qpe 1>/dev/ttySAC0  2>/dev/null)

推荐阅读
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • Howtobuilda./configure&&make&&makeins ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • ihaveusedthedelphidatabindingwizardwithmyxmlfile,andeverythingcompilesandrunsfine. ... [详细]
  • uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬 ... [详细]
  • 源码安装Nginx 解决报错
    CentOS8源码安装Nginx编译安装注意事项如果安装时不是使用的默认路径,则必须要修改PATH环境变量,以能够识别此程序的二进制文件路径 ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
author-avatar
蓝紫藤田_835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有