imx.7交叉编译libX11

文章讲述了在处理触摸屏无响应问题时,通过GDB调试发现是由于官方库出现问题。作者尝试移植X11库并解决libxcb版本过高导致的编译错误,强调了环境变量设置对跨平台编译的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

还是之前提到的触摸屏无响应问题,通过GDB调试,发现APP并非人为代码卡死,而是卡在官方的libc.so.6中,这个库出现了一些错误。排除自己代码问题,就剩官方版本问题,移植X11库,或者新版本的的Qt。结合网上的解决办法,先移植libX11查看效果。


参考:

交叉编译libX11_\\libx11-优快云博客

该文章已经很详细的讲到了移植全过程,实践下来并没有太多问题,并且他文中提到的问题一定会出现,没有提到的也会出现,大致是因为自己虚拟机环境,以及版本问题,只需要根据第一条报错逐条进行修复即可。


注意:

问题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" ]; then
  if [ "$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.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset 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

所有用到的库的源文件已打包,一键解压到目录编译安装即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值