tslib-1.4 和 arm版QT配置编译过程

来源:互联网 发布:隐藏手机号码软件 编辑:程序博客网 时间:2024/04/28 19:23

最近交叉编译了tslib-1.4,把主要过程和要注意的地方写下来。

1-./autogen.sh

2-echo ac_cv_func_malloc_0_nonnull=yes>$ARCH-linux.cache

3-./configure --host=$ARCH-linux --prefix=/usr/local --cache-file=$ARCH-linux.cache --enable-inputapi=no

--enable-inputapi=no:看你的触摸屏驱动是否支持ioctl操作,如果支持就不用写上,不支持就要添上,如果不添加会有
ts_open:Inappropriate ioctol for device
ts_open: No such file or directory
等错误(网上别人的文档是这么说的,我没有试过不加这个参数会怎样,感兴趣的试一下)

4-编译并安装后会在/usr/local(可以随意指定,但是最好要和你的开发板的路径相同,我试过一次不同时,运行./ts_calibrate,会报not found的错误)下有bin,etc,include,lib,在你的开发板上的相同路径建立这些文件夹,并把关于tslib的相关东西考到这些文件内。

5-/etc/ts.conf配置
module_raw input #这句一定要
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

6-在你的开发板的/etc/profile文件里添加运行tslib的环境变量(一定要放到/etc/profile,我放到/etc/init.d/rcS里就没有作用,愿因是export只能在当前shell和它的子shell有用,不能影响登录的shell

# /etc/profile

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/arm/X11R6/bin
export PATH

export TSLIB_ROOT=/usr/local
export TSLIB_TSDEVICE=/dev/event0(你的开发板dev下的触摸屏设备节点文件)
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib(这句我注释掉的原因是:有一种说法是使用 LD_LIBRARY_PATH这样设置不安全,我的做法是把路径添加到/etc/ld.so.conf文件中,然后执行ldconfig命令,这样就可以了。ldconfig在你的交叉编译工具里就有)

这样大概就差不多了,运行./ts_calibrate如果还提示ts_open: No such file or directory,用env命令看一下,当前系统是否有你设置的tslib环境变量,
没有的话会提示这个错误的,我在第一次设置/etc/profile文件就没有好使,修改了一下,重启系统就好用了。

运行./ts_calibrate进行触摸屏校准,再运行./ts_test测试效果

 

 

将tslib打包进Qt

进入源码目录

./configure -embedded arm -xplatform qws/linux-arm-g++ -qt-sql-sqlite -no-qt3support -depths 16 -qt-mouse-tslib -I/usr/local/include -L/usr/local/lib -nomake demos -nomake examples

make

make install

期间遇到好多问题,参考了一些列文章

感谢万能的google,大部分人都能从中找到答案,走向了make之路。但是也有人试了别人的方法都不成功,成了未解之谜。

其实有两个方法,能让我们更深入一点看到我们我们这些错误从何而来,从而帮助我们去自己解决问题。
1。 在./configure 的选项里加上 -verbose选项,出错信息会更丰富,而不是没头没脑的来一句测试失败了
2。 还有个方法就是根据提示的出错信息,去$QTDIR/config.test目录下去找对应的测试例子,因为单独编译,这样你就把问题大大的缩小了,找到问题的概率也变大了。

昨天在本站论坛就 有朋友碰到“The tslib functionality test failed!”的问题,最后通过测试config.test/unix/tslib目录下的小例子(这些小例子正是./configure会调用测试, 给出正确或出错信息的。)最后发现是版本不兼容的原因。

其实还有一个方法,去读./configure文件,这才是真正的万能钥匙。 刚开始你可能漫无头绪,其实加些打印(如果是bash写的,就用echo;如果是perl写的,就用print),过一阵之后,你会发现自己几乎解决绝大部分问题。

这是QTCute里面的一段文字,对我们真的很有启发


参考的网站资料:

1.华清远见:http://www.embedu.org/Column/Column97.htm

2.CuteQt:http://www.cuteqt.com/blog/?tag=%E8%B0%83%E8%AF%95

3.QtForm.org:http://www.qtforum.org/index.php?page=Thread&postID=96421&s=1139c1ca29512d3637ef4ca64d15e0e6863c8c1c#post96421

4.csdn博客:http://blog.csdn.net/chen2qiao/archive/2009/09/14/4550505.aspx

 

 

 

遇到的问题和解决:

(1)
ScreenOptionsMasterPrefs.cpp:148: 错误: 显式特例化不能有存储类型
ScreenOptionsMasterPrefs.cpp:148: error: explicit template specialization cannot have a storage class


错误:显式特例化不能有存储类型
但是任何一个用低版本gcc写的软件 ,在用高版本gcc编译安装的时候出现错误 ,都可以通过修改源码改正 错误
把那个static 去掉,,,
#模板类中,如果模板那个参数类型已经指定(在函数声明实现的时候),必须把声明和实现放在一个文件中,这个时候把函数声明为static会冲突
#如果是一个一般的模板类,声明和定义可以分开,这个是到链接时候才知道类型,把函数声明为static不冲突

130行 static void MovePref<bool>( int &iSel, bool bToSel, const ConfOption *pConfOption )
改为                  void MovePref<bool>( int &iSel, bool bToSel, const ConfOption *pConfOption )

 

(2)
configure.ac error possibly undefined macro AS_HELP_STRING
这个是编译 tslib1.4的错误
意思是,将宏AS_HELP_STRING改为 宏AC_HELP_STRING

 

(3)
./hello -qws                                         
Error: QWSTslibMouseHandlerPrivate: ts_open() failed with error: 'No such file or dire'
add:export QWS_MOUSE_PROTO=tslib:/dev/event0

 

感谢:

http://blog.csdn.net/maidisula/archive/2009/07/23/4373067.aspx

http://hi.baidu.com/a263238386/blog/item/95b03424bec1b1398644f9e5.html

原创粉丝点击