主题 : linux2.6.29+qtopia2.2.0 如何实现多线程编程呢? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 24720
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2010-07-13
最后登录: 2010-09-11
30楼  发表于: 2010-07-20 15:37
回答29楼,这个问题我已经解决。把src-mt.mk 里后3项全都注释掉。就能过去。不过我只是编译过去了x86,arm过不去,等待高人解答...
级别: 新手上路
UID: 24486
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2010-07-08
最后登录: 2011-05-18
31楼  发表于: 2010-07-25 14:34
引用第30楼松杉梢林于2010-07-20 15:37发表的  :
回答29楼,这个问题我已经解决。把src-mt.mk 里后3项全都注释掉。就能过去。不过我只是编译过去了x86,arm过不去,等待高人解答...

咋个就没人呢,难道问题太弱了?
级别: 新手上路
UID: 24486
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2010-07-08
最后登录: 2011-05-18
32楼  发表于: 2010-07-25 15:55
引用第29楼reeky于2010-07-09 12:05发表的  :
每一步都按贴子写的,最后 在qt2/目录下执行make src-mt,出现下面的错误:
[root@Fedora qt2]# make src-mt
cd src/moc; make
make[1]: Entering directory `/opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/src/moc'
g++  -c -I/opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/include -Wno-unused -Wno-parentheses -pipe -DQWS -fno-exceptions -fno-rtti -O2 -fno-default-inline -Wall -W -DNO_DEBUG -DQT_NO_CODECS -DQT_LITE_UNICODE -DQT_BUILDING_MOC -I../../include -I../tools -I. -o mocgen.o mocgen.cpp
.......

已解决:将qt2/src/tools/qtextcodec.cpp改成下面的(虽然很简单,可能就是这样大家知道也不说,想了下,贴出来最好了)
#define QT_NO_EUCJPCODEC
2149 #ifndef QT_NO_EUCJPCODEC
2150     (void)new QEucJpCodec;
2151 #endif
2152 #define QT_NO_SJISCODEC
2153 #ifndef QT_NO_SJISCODEC
2154     (void)new QSjisCodec;
2155 #endif
2156 #define QT_NO_JISCODEC
2157 #ifndef QT_NO_JISCODEC
2158     (void)new QJisCodec;
2159 #endif
2160 #define QT_NO_EUCKRCODEC
2161 #ifndef QT_NO_EUCKRCODEC
2162     (void)new QEucKrCodec;
2163 #endif
2164 #define QT_NO_GBKCODEC
2165 #ifndef QT_NO_GBKCODEC
2166     (void)new QGbkCodec;
2167 #endif
2168 #define QT_NO_BIG5CODEC
2169 #ifndef QT_NO_BIG5CODEC
2170     (void)new QBig5Codec;
2171 #endif
2172 #define QT_NO_RTLCODEC
2173 #ifndef QT_NO_RTLCODEC
2174     (void)new QArabicCodec;
2175     (void)new QHebrewCodec;
2176 #endif
2177 #define QT_NO_TSCIICODEC
2178 #ifndef QT_NO_TSCIICODEC
2179     (void)new QTsciiCodec;
2180 #endif
细细想来这是很直接的一个问题,折腾这么久,还是因为太害怕错误了,害怕得让人完全失去了分析问题的勇气。
大笑笑大
级别: 骑士
UID: 25314
精华: 8
发帖: 184
金钱: 1320 两
威望: 264 点
贡献值: 8 点
综合积分: 528 分
注册时间: 2010-07-22
最后登录: 2014-10-11
33楼  发表于: 2011-01-14 16:04

 回 32楼(reeky) 的帖子

由于qtopia 2.2.0的makefile里的问题,你现在只能自己手动编译出支持thread的libqte-mt.so. 具体做法如下:

1. 按照手册上的步骤,用“build”或者"build-all"脚本做一次完整的qtopia 2.2.0的编译;

2. 在解压出来的qtopia-2.2.0-FriendlyARM目录下执行
$source setQteEnv

3. 进入qtopia-2.2.0-FriendlyARM/qt2目录,清除之前编译生成的文件然后手动配置qt embedded以支持multi-thread:
$cd qt2
$make clean
$echo yes |./configure -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -gif -thread
注意这边:
对应arm-qtopia的命令为:
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
注意:上面configure后的参数是我自己的配置,可能与你的不同。configure之后的参数应该与你自己x86-qtopia或者arm-qtopia目录下的“build“脚本里的”echo yes | ./configure -qte“之后的参数保持一致, 只是在最后加上"-thread"

4. 上面的步骤执行后会在当前目录下产生src-mt.mk文件,用编辑器将其内容的最后一行”cd src; $(MAKE) clean“删除或注释掉;

5. 编译libqte-mt
$make src-mt

编译完成后将在qtopia-2.2.0- FriendlyARM/qtopia/lib目录下生成所期待的libqte-mt.so.*文件。用nm命令可以看到现在qt embedded中就已经加入了QThread支持:
[ 此帖被xphyym在2011-01-14 16:14重新编辑 ]
级别: 侠客
UID: 20445
精华: 0
发帖: 77
金钱: 385 两
威望: 77 点
贡献值: 0 点
综合积分: 154 分
注册时间: 2010-05-02
最后登录: 2023-04-10
34楼  发表于: 2011-09-22 13:41
QTOPIA多线程,MARK!
级别: 新手上路
UID: 62768
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
贡献值: 0 点
综合积分: 48 分
注册时间: 2012-02-07
最后登录: 2018-04-16
35楼  发表于: 2012-02-08 00:42
大体浏览了下论坛里的   还是 不懂    linux2.6.29+qtopia2.2.0  使用linux 自带的线程pthread_create(&id,NULL,(void *) thread,NULL);    怎么添加头文件  ,怎么定义线程函数,谁给具体指点下,还有必须手动编译出支持thread的libqte-mt.so 这个库么?  能不能使用 linux 自带的线程库呢,望高手指点
级别: 新手上路
UID: 55129
精华: 0
发帖: 35
金钱: 175 两
威望: 35 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2011-09-13
最后登录: 2013-05-13
36楼  发表于: 2012-09-02 17:23
请问版主kasim ,我按照你20楼的步骤做,最后那个文件libqte-mt.so.*也有了,但是我make还是一样的有error: expected class-name before '{' token,请问是不是需要在Makefile文件里面添加什么参数还是要怎么样呢?