QT移植笔记

首先需要移植tslib
网上找的资料如下:
tslib1.4配置
我使用的配置:
./configure --host=arm-buildroot-linux-uclibcgnueabi --cache-file=arm-linux.cache --enable-inputapi=no -prefix=/usr/local/tslib ac_cv_func_malloc_0_nonnull=yes

      2、解压安装tslib

           # tar -zxvf tslib-1.4.tar.gz
           # cd tslib
           # ./autogen.sh
           echo "ac_cv_func_malloc_0 _nonnull=yes">arm-linux.cache
           # ./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no -prefix=/usr/local/tslib
           # make
           # make install

      说明:

      (1) 红色的“0”是数字0;(2) /usr/local/tslib表示tslib安装后的路径

      3、修改ts.conf内容

      # vi /usr/local/tslib/etc/ts.conf

           module_raw input
           module pthres pmin=1
           module variance delta=30
           module dejitter delta=100
           module linear

      然后将整个tslib文件夹,下载到开发板的对应路径下(/usr/local)。

      4、开发板配置环境变量

      通过超级终端,# vi /etc/profile

      添加如下内容(绿色):

           export TSLIB_ROOT=/usr/local/tslib
           export TSLIB_TSDEVICE=/dev/input/event0    指定触屏设备
           export TSLIB_CALIBFILE=/etc/pointercal    指定触摸屏校准文件 pintercal 的存放位置
           export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf    指定 TSLIB 配置文件的位置
           export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts    指定触摸屏插件所在路径
           export TSLIB_FBDEVICE=/dev/fb0    指定帧缓冲设备
           export TSLIB_CONSOLEDEVICE=none    设定控制台设备为 none ,否则默认为 /dev/tty ,这样可以避免出现“ open consoledevice: No such file or directory KDSETMODE: Bad file descriptor ” 的错误
           export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

      另外,要确保在/dev/input/目录下有event0设备文件,在/dev/目录下有fb0设备文件,如果没有,在执行下面./ts_calibrate 的时候,会报出“open *: No such file or directory ”的错误,这时,我们需要手动创建设备文件:

           # mknod /dev/input/event0 c 13 64
           # mknod /dev/fb0 c 29 0


      5、执行测试命令

      重启开发板,在 /usr/local/tslib/bin 目录下,输入./ts_calibrate,出现tslib的触摸屏五点校准画面,至此,tslib的安装移植成功完成。
     
问题
./autogen.sh: 4: autoreconf: not found
  是在不同版本的 tslib 下执行 autogen.sh 产生。它们产生的原因一样,是
因为没有安装
  automake 工具,      (ubuntu 8.04)用下面的命令安装好就可以了。
  sudo apt-get install autoconf automake libtool
configure的时候必须加入 ac_cv_func_malloc_0_nonnull=yes否则编译的时候会报错

开始移植QT
QT编译配置:
./configure -opensource -confirm-license -prefix /usr/local/Trolltech/Qt-4.8.6-arm/ -embedded arm -xplatform qws/linux-arm-g++  -depths 16,18,24 -fast -optimized-qmake -pch -little-endian -no-largefile -no-accessibility  -no-libtiff -no-libmng -no-xmlpatterns -no-multimedia -no-audio-backend -no-phonon-backend -no-webkit -no-declarative-debug -no-mmx -no-sse -no-sse2 -no-sse3 -no-sse4.1 -no-sse4.2 -no-avx -nomake examples -nomake demos -nomake tools -nomake docs -no-opengl -no-qt3support -no-cups -no-dbus -no-3dnow -no-neon -no-phonon -no-openssl -no-svg -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib

将库都编译出来,不要省去
./configure -opensource -confirm-license -prefix /usr/local/Trolltech/Qt-4.8.6-arm/ -embedded arm -xplatform qws/linux-arm-g++  -depths 16,18,24 -fast -optimized-qmake -pch -little-endian -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib

上面两个配置,第一个干掉好多功能,第二个基本保留了
最后编译后qt路径-prefix /usr/local/Trolltech/Qt-4.8.6-arm/

错误一:
/home/hjj/emqt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_read_raw'
/home/hjj/emqt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_open'
/home/hjj/emqt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_fd'
/home/hjj/emqt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_config'
/home/hjj/emqt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_close'
/home/hjj/emqt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_read'
collect2: error: ld returned 1 exit status
修改
vi mkspecs/qws/linux-arm-g++/qmake.conf 修改如下 加入-lts
QMAKE_CC                = arm-buildroot-linux-uclibcgnueabi-gcc -lts
QMAKE_CXX               = arm-buildroot-linux-uclibcgnueabi-g++ -lts
QMAKE_LINK              = arm-buildroot-linux-uclibcgnueabi-g++ -lts
QMAKE_LINK_SHLIB        = arm-buildroot-linux-uclibcgnueabi-g++ -lts
解决办法二:
把/usr/local/tslib下的相关库
libts-0.0.so.0  libts-0.0.so.0.1.0
把库拷贝到交叉编译环境的库里面也可以解决这个问题。
这个一看就是ts库没包含到,两种方法应该都可以。

错误二:
/opt/boot-time-labs/buildroot/buildroot-at91/output/host/usr/lib/gcc/arm-buildroot-linux-uclibcgnueabi/4.7.2/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lbootstrap
collect2: error: ld returned 1 exit status
make[1]: *** [../../../bin/lrelease] 错误 1

出现这个错误最后解决办法是 -nomake demo这个后面加个s,变成-nomake demos 这样就没问题了,其实在运行.configure的时候就会报错误
这个错误是直接拷贝网上的configure造成的,主要demo改成demos就ok了,网上有高手文章说这个。

板上环境变量设置
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none

export QTEDIR=/usr/local/qt
export QT_QWS_FONTDIR=$QTEDIR
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export QWS_KEYBOARD=none
export LD_LIBRARY_PATH=$QTEDIR/:$TSLIB_ROOT/lib:$LD_LIBRARY_PATH

 

两个重要技巧:
1.环境变量配置使用脚本的时候配置不生效,后面发现在脚本里面配置环境变量要使用 . 脚本的方式运行,点空格脚本 这样运行再运行程序就ok了
这个问题搞了好久,个人理解,用脚本设置完环境变量,运行脚本的那个进程退出,它设置的环境变量一起没了,应该就是这个原因。


2.编译完qt, install后qt安装到-prefix /usr/local/Trolltech/Qt-4.8.6-arm/ 里面有个bin文件里面有qmake 使用这个可以直接生产Makefile然后直接make就可以编译QT应用了。
对于编译后的程序我们使用arm-linux-readelf查看它依赖的共享库例如:arm-linux-readelf -a mypreject |grep “Share” 这样可以扫描出该程序依赖的共享库。
最后出来结果,将需要的库文件拷贝到arm,加入到运行环境就OK了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值