您的位置:首页 > 编程语言 > Qt开发

一个顽疾——QT不能包含tslib的头和库文件联合编译的解决方法

2011-07-19 15:12 543 查看
先介绍一下我的交叉编译环境,OS是Fedora9,交叉编译器是arm-linux-gcc-4.3.3(arm-2009q1),其它,tslib-1.4、QT4.7.2,硬件平台Omap3530。

以前我的交叉编译器使用的是arm-linux-gcc-4.3.2,联合编译QT4.7.2和tslib-1.4没有任何问题。现在,我换成了arm-linux-gcc-4.3.3,再次联合编译时,就出现问题了。过程如下:

1、安装tslib-1.4

2、下载QT,我当时下载的版本是 qt-everywhere-opensource-src-4.7.2.tar.gz 。

3、执行以下命令执行QT4.7.2编译前的配置:

# tar -zxvf qt-everywhere-opensource-src-4.7.2.tar.gz

# cd qt-everywhere-opensource-src-4.7.2

# echo yes | ./configure -prefix /opt/Qt4.7 -opensource -embedded arm -no-qt3support -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-pc -no-mouse-linuxtp -qt-mouse-tslib -I /usr/local/tslib/include -L /usr/local/tslib/lib
-no-neon

上面的主要参数含义说明如下:

-prefix /opt/Qt4.7 : 表示Qt4.7最终的安装路径是/opt/Qt4.7。注意,将QT部署到目标板上时,也需要把Qt4.7放在这个路径上;

-embedded arm : 表示将编译针对arm平台的embedded版本;

-xplatform qws/linux-arm-g++ : 表示使用arm-linux交叉编译器进行编译;

-qt-mouse-tslib : 表示将使用tslib来驱动触摸屏

-I /usr/local/tslib/include

-L /usr/local/tslib/lib : 包含tslib的头文件和库文件

这时,问题出现了。屏幕上会打印如下信息:

The tslib functionality test failed!

You might need to modify the include and library search paths by editing

QMAKE_INCDIR and QMAKE_LIBDIR in

/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++.

根据提示,需要将tslib的头文件和库文件的路径赋给QMAKE_INCDIR和QMAKE_LIBDIR两个变量。于是,进入/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++路径下,打开qmake.conf文件,在3个include后面添加:

QMAKE_INCDIR = /usr/local/tslib/include

QMAKE_LIBDIR = /usr/local/tslib/lib

去掉 -I 和 -L 两个参数,重新执行上面的命令,结果仍然出现相同的问题。

于是,又开始求助google和百度了。但是,搜到的结果基本上都是说系统找不到tslib的头和库文件,将tslib头文件和库文件的路径赋给QMAKE_INCDIR和QMAKE_LIBDIR就可以解决问题。这种方法我已经试过了,对于我这种情况,显然不适用。

那为什么我之前用arm-linux-gcc-4.3.2编译的时候就没有问题呢?这时,我开始找两个编译器之间的不同之处了,我到arm-linux-gcc-4.3.2的bin文件夹下,发现里面没有arm-linux-gcc和arm-linux-g++指令,取而代之的是arm-none-linux-gnueabi-gcc和arm-none-linux-gnueabi-g++了。于是,我修改了/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++/qmake.conf文件,将arm-linux换成arm-none-linux-gnueabi:

#

# qmake configuration for building with arm-linux-g++

#

include(../../common/g++.conf)

include(../../common/linux.conf)

include(../../common/qws.conf)

# modifications to g++.conf

QMAKE_CC = arm-none-linux-gnueabi-gcc

QMAKE_CXX = arm-none-linux-gnueabi-g++

QMAKE_LINK = arm-none-linux-gnueabi-g++

QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++

# modifications to linux.conf

QMAKE_AR = arm-none-linux-gnueabi-ar cqs

QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy

QMAKE_STRIP = arm-none-linux-gnueabi-strip

load(qt_config)

再次执行上面的指令,问题解决。

4、执行以下指令编译并安装QT4.7.2:

# make && make install

上面命令中出现的 && 符号表示只有左边的 make 命令执行成功时(返回0),才会执行右边 make install 命令。

编译的时候,又出现了以下错误,为什么这么多问题?没办法,看看问题在哪儿吧。

/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/lib/libQtGui.so: undefined reference to `ts_read_raw'

/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/lib/libQtGui.so: undefined reference to `ts_open'

/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/lib/libQtGui.so: undefined reference to `ts_fd'

/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/lib/libQtGui.so: undefined reference to `ts_config'

/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/lib/libQtGui.so: undefined reference to `ts_close'

/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/lib/libQtGui.so: undefined reference to `ts_read'

继续求助网络,这个问题比较好解决,将/home/liuqiqi/source/qt/qt-everywhere-opensource-src-4.7.2/mkspecs/common/linux.conf中的QMAKE_LIBS_THREAD变量添加一个参数“-lts”,如下所示,保存后,继续编译:

QMAKE_LIBS_THREAD = -lpthread -lts

编译完成后,Qt4.7.2被安装在/opt/Qt4.7目录下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐