背景:
还是之前提到的触摸屏无响应问题,通过GDB调试,发现APP并非人为代码卡死,而是卡在官方的libc.so.6中,这个库出现了一些错误。排除自己代码问题,就剩官方版本问题,移植X11库,或者新版本的的Qt。结合网上的解决办法,先移植libX11查看效果。
参考:
交叉编译libX11_\\libx11-CSDN博客
该文章已经很详细的讲到了移植全过程,实践下来并没有太多问题,并且他文中提到的问题一定会出现,没有提到的也会出现,大致是因为自己虚拟机环境,以及版本问题,只需要根据第一条报错逐条进行修复即可。
注意:
问题1:
原因是libxcb的版本太新,我使用最新的版本,正确配置和安装后,在编译libX11还是会报错,解决办法:替换为较为早期的版本,比如libxcb-1.16,只要低于libproto版本即可。
问题2:
libX11报错中断编译后,解决完问题,make clean,重新配置编译。
问题3:
env中的交叉编译工具链一定要在能找到的环境变量中才可以,不然还是会报找不到编译器。
以下是我个人的环境变量设置,仅供参考。
#! /bin/bash
## use config export
export ARCH=arm ;
export CROSS_COMPILE=arm-linux-gnueabihf-;
source /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).if [ "$PS1" ]; thenif [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then# The file bash.bashrc already sets the default PS1.# PS1='\h:\w\$ 'if [ -f /etc/bash.bashrc ]; then. /etc/bash.bashrcfielseif [ "`id -u`" -eq 0 ]; thenPS1='# 'elsePS1='$ 'fifi
fiif [ -d /etc/profile.d ]; thenfor i in /etc/profile.d/*.sh; doif [ -r $i ]; then. $ifidoneunset i
fi
export PATH=$PATH:/usr/local/toolchain/gcc-linaro/bin/
export UBUNTU_MENUPROXY=0
export PREFIX=/home/cc/lib11/libX11_install
export HOST=arm-linux-gnueabihf
export LD_LIBRARY_PATH=$PREFIX/lib
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
结果查看:
查看X11的版本网上都未提及,通过下面指令在库文件目录查看。
strings libX11.so.6 | grep X11
所有用到的库的源文件已打包,一键解压到目录编译安装即可。