天嵌 ARM开发社区

 找回密码
 注册
查看: 4072|回复: 3

QT多线程编译错误cannot find -lqte-mt怎么解决?

[复制链接]
ares2004 发表于 2010-8-10 20:12:25 | 显示全部楼层 |阅读模式
QT程序,无多线程前能编出成功的程序。加了多线程以后编译出现错误,编译时出现cannot find -lqte-mt,好像是编译通过了,连接时出现的问题,网上查了下,说是少了库文件libqte-mt.so(.*),是多线程使用的库文件。哪位知道怎么才能得到这个库文件?或者有什么别的解决方案?
guoyin 发表于 2010-8-10 21:37:50 | 显示全部楼层
_______用qt/embedded,会出现错误:
[maidisula@localhost ~]$ cd wdwj/wdzl/qt/test/helloworld/
[maidisula@localhost helloworld]$ qmake -project
[maidisula@localhost helloworld]$ qmake
[maidisula@localhost helloworld]$ make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -O2 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/local/arm/qte/mkspecs/default -I. -I. -I/usr/local/arm/qte/include -o helloworld.o helloworld.cpp
g++ -Wl,-rpath,/usr/local/arm/qte/lib -o helloworld helloworld.o -L/usr/local/arm/qte/lib -lqte-mt
/usr/bin/ld: skipping incompatible /usr/local/arm/qte/lib/libqte-mt.so when searching for -lqte-mt
/usr/bin/ld: cannot find -lqte-mt
collect2: ld 返回 1
make: [helloworld] 错误 1

______解决:
    libqte-mt.so,是“需要”你在对qte(一般如qtopia-free-2.1.1包中包含的qt-2.3.10就是qt/e包)这个软件包进行configure 的时候加上参数 -thread,这样make后在$QTEDIR/lib/中生成libqte-mt.so(.*)文件。如果不加上-pthred,生成libqte.so(.*)库文件。
这两种文件的不同是,前者还能支持qt内部的线程,而后者不支持,后者只支持posix pthread线程。
    一个程序里面不可能同时链接这两个库。
    上面我们看到报错,可以从g++ 的参数-DQT_THREAD_SUPPORT中得到验证,他表示需要多线程支持。至于-DQT_THREAD_SUPPORT表示qt内部线程还是posix,为什么,我还不知道。

     我在qtopia-free-2.1.1包的qt/e中,带-thread进行配置,结果能生成libqte.so(.*)和libqte-mt.so(.*)。
guoyin 发表于 2010-8-10 21:39:35 | 显示全部楼层
_______用qt/embedded,会出现错误:
[maidisula@localhost ~]$ cd wdwj/wdzl/qt/test/helloworld/
[maidisula@localhost helloworld]$ qmake -project
[maidisula@localhost helloworld]$ qmake
[maidisula@localhost helloworld]$ make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -O2 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/local/arm/qte/mkspecs/default -I. -I. -I/usr/local/arm/qte/include -o helloworld.o helloworld.cpp
g++ -Wl,-rpath,/usr/local/arm/qte/lib -o helloworld helloworld.o -L/usr/local/arm/qte/lib -lqte-mt
/usr/bin/ld: skipping incompatible /usr/local/arm/qte/lib/libqte-mt.so when searching for -lqte-mt
/usr/bin/ld: cannot find -lqte-mt
collect2: ld 返回 1
make: [helloworld] 错误 1

______解决:
如果你用QT/Embedded的话有两个地方你需要修改一下的:
1、第二个qmake那里加上你目标平台。比如说你的QT/Embedded编译时的目标平台是ARM,那么应该这样输入:
qmake -spec $ QTDIR /mkspecs/qws/linux-arm-g++
2、 生成的Makefile可能要修改一下。找到 -lqte ,如果不是 -lqte-mt,那么请你把 -lqte 改为 -lqte-mt
另处要注意的就是你生成的执行文件要在开发板上运行,如果想在主机执行话要安装 qvfb 这个工具来执行
 楼主| ares2004 发表于 2010-8-10 22:42:16 | 显示全部楼层
这两篇文章我也看到过,可是还是不知道怎么改,找到tmake.config,改了改也不管用,是不是要重新编译tmake,还是要重新编译其他什么?我是按天嵌光盘里的手册说的搭建的开发环境,不知道怎么改?哪位遇到过这个问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-27 21:02 , Processed in 1.035196 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表