移植Qt

来源:互联网 发布:淘宝生产许可证怎么办 编辑:程序博客网 时间:2024/06/05 20:01

buildroot中配置

Target packages  --->    Graphic libraries and applications (graphic/text)  --->         [*] Qt  --->              [*]   Approve free license             Graphics drivers  --->                [*] Linux Framebuffer (NEW)             Keyboard drivers  --->                [*] linux input

配置完,进行编译,最终生成的文件系统中usr/lib目录下包含了Qt的动态库。

环境变量

在etc/init.d目录下的初始化脚本中设置Qt的环境变量

export QTDIR=/usr/libexport LD_LIBRARY_PATH=$QTDIR/:$LD_LIBRARY_PATHexport QT_QWS_FONTDIR=$QTDIR/fontsexport QWS_SIZE=640x480export QWS_DISPLAY=LinuxFb:/dev/fb0

问题

这样移植完之后,Qt程序可以正常运行,但是按键不管用。网上说需要显示的指定keyboard的设备,但是我们需要热插拔标准键盘就出现问题了。所以,Qt应该动态识别keyboard的设备。

其他项目中的Qt是可以实现动态识别的。通过对比,发现唯一的区别就是Qt的动态库不同。一个是手动配置编译的,一个是buildroot配置编译的,难道buildroot会出错。

手动编译

cd output/build/qt-4.8.7目录下

make cleancd mkspecscp -rf linux-arm-gnueabi-g++ linux-arm-g++

vi linux-arm-g++/qmake.conf,修改交叉编译工具

# modifications to g++.confQMAKE_CC                = arm-linux-gccQMAKE_CXX               = arm-linux-g++QMAKE_LINK              = arm-linux-g++QMAKE_LINK_SHLIB        = arm-linux-g++# modifications to linux.confQMAKE_AR                = arm-linux-ar cqsQMAKE_OBJCOPY           = arm-linux-objcopyQMAKE_STRIP             = arm-linux-strip

配置信息如下:

./configure \ -prefix /usr/local/arm/qt4.8.7\ -opensource \ -confirm-license \ -release -shared \ -embedded arm \ -xplatform linux-arm-g++ \ -depths 16,18,24,32 \ -fast \ -optimized-qmake \ -little-endian -host-little-endian \ -qt-zlib \ -no-openssl \ -no-glib \ -no-qt3support \ -no-libtiff -no-libmng \ -no-opengl \ -no-mmx -no-sse -no-sse2 \ -no-3dnow \ -no-qvfb \ -no-phonon \ -no-nis \ -no-opengl \ -no-cups \ -no-separate-debug-info \ -nomake docs \ -qt-kbd-linuxinput

编译:

make 

利用新编译出来的qmake来编译自己的Qt程序。

通过arm-linux-readelf命令查看程序依赖的Qt动态库

arm-linux-readelf -d my_qt

手动将这些动态库拷贝到根文件系统下,替换掉之前buildroot编译出来的动态库。
还是使用之前的配置:

export QTDIR=/usr/libexport LD_LIBRARY_PATH=$QTDIR/:$LD_LIBRARY_PATHexport QT_QWS_FONTDIR=$QTDIR/fontsexport QWS_SIZE=640x480export QWS_DISPLAY=LinuxFb:/dev/fb0

现在按键可以使用了,而且标准键盘也可以使用了。不需要显示指定keyboard设备。
这儿的重点是配置时设置keyboard的输入为linuxinput。猜想Qt的内核中处理了该动态事件。

原创粉丝点击