0 前言

本文探索如何将libX11移植到ARM开发板。

1 源码

从参考资料[1]或这里下载相关源码,本文下载源码为:libX11-1.6.10.tar.gz

解压源码包:

tar -zxvf  libX11-1.6.10.tar.gz  

2 配置

创建一个用于目录作为libX11的安装位置(因为是交叉编译,所以不能使用默认的安装目录,否则会破坏ubuntu系统):

mkdir -p third_lib/X11

2.1 环境变量设置

为了方便配置,可以先设置环境变量(具体值要根据你的目录名和交叉工具链名进行修改):

export PREFIX=/home/wyj/third_lib/X11
export HOST=arm-linux-gnueabihf

将上述内容保存为env.sh,然后执行以下命令使其生效:

source env.sh

2.2 configure

进入libX11-1.5.0目录,执行下面命令进行配置

./configure --prefix=$PREFIX --host=$HOST

配置结果如下:

X11 will be built with the following settings:Loadable i18n module support:            noLoadable xcursor library support:        yesThreading support:                       yesUse Threads safe API:                    yesThreads stubs in libX11:                 noXCMS:                                    yesInternationalization support:            yesXF86BigFont support:                     noXKB support:                             yesXLOCALEDIR environment variable support: yesCompose table cache enabled:             noFunctional specs building enabled:       yes

2.2.1  配置错误解决

在配置libX11-1.6.10时遇到下面错误

可通过--cache-file参数解决上述错误[:

echo "xorg_cv_malloc0_returns_null=yes" > arm-linux.cache./configure --prefix=$PREFIX --host=$HOST --cache-file=arm-linux.cache

3 编译

配置好后,就可可以执行以下命令进行编译

make

3.1.  编译错误解决

3.1.1   X11/X.h: No such file or directory

在移植过程中,遇到各种各样的错误是难免的,关键是找到问题的所在,从而解决它。下面是进行编译时遇到的第一个错误:

make[3]: Entering directory `/home/wyj/third_lib/libX11-1.6.10/modules/im/ximcp'CC     imCallbk.lo
In file included from ../../../include/X11/Xlibint.h:41:0,from imCallbk.c:38:
../../../include/X11/Xlib.h:44:19: fatal error: X11/X.h: No such file or directory
compilation terminated.
make[3]: *** [imCallbk.lo] Error 1

下载xproto-7.0.31.tar.gz(可到这里下载更新版本),然后将其加压到上面创建的third_lib目录中,进入xproto-7.0.31目录,执行以下命令来配置和安装xproto。

./configure --prefix=$PREFIX --host=$HOST
make
make install

这时,上面创建的X11目录中就多了一些目录(inclue、lib、share)和其它相关文件,其中include/X11目录包含了X.h文件。

然而,就算有了X.h头文件,在编译过程中编译工具也不会自动找到它。其实,使用find命令可以找到ubuntu的/usr/include/X11中是存在X.h这头文件的。现在是交叉编译,交叉编译工具不会自动的到/usr/include目录中去寻找头文件,当然也不会到X11/include这个用户自己创建的目录去找,除非用户指定。

然而,由于Makefile的内容太多,而且非常复杂,直接修改其中的includedir变量时,发现无济于事。这时,唯一的办法就是指定PKG_CONFIG_PATH环境变量(原因请看《pkg-config》)。

将2.1中的环境变量添加“export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig”:

export PREFIX=/home/wyj/third_lib/X11
export HOST=arm-linux-gnueabihf
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig  # 新增

然后再次source env.sh使其生效,然后按照2.2小节的方法重新配置X11,然后再次编译即可。

3.1.2 X11/Xtrans/Xtrans.h: No such file or directory

下载xtrans-1.4.0.tar.gz(可到这里下载最新版本),解压到third_lib目录中,然后使用3.1.1同样的方法配置和安装xtrans。

然后,继续编译libX11即可解决此问题。

3.1.3 X11/extensions/XKBproto.h: No such file or directory

下载kbproto-1.0.7.tar.gz(可点击这里下载最新版本),解压到third_lib目录中,然后使用3.1同样的方法配置和安装xbproto。

然后,继续编译libX11即可解决此问题。

3.1.4 X11/extensions/XI.h: No such file or directory

下载inputproto-2.3.2.tar.gz,(可点击这里下载最新版本),解压到third_lib目录中,然后使用3.1.1同样的方法安配置和安装inputproto。

然后,继续编译libX11即可解决此问题。

3.1.5 xcb/xcb.h: No such file or directory

下载libxcb-1.14.tar.xz(可到这里下载更新版本),解压到third_lib目录中,然后使用3.1.1同样的方法配置和安装libxcb。在配置libxcb的过程中,会出现以下错误

 (1)configure: error: XCB requires xsltproc.

那是因为ubuntu中没有xsltproc这个工具导致的可以使用下面命令安装一个:

sudo apt-get install xsltproc

(2)No package 'xcb-proto' found

Ubuntu PC需要安装:

sudo apt-get install xcb-proto

此外,需要交叉编译:

下载xcb-proto-1.14.1.tar.gz(可到这里下载更新版本),解压到third_lib目录中,然后使用3.1.1同样的方法配置和安装xcb-proto。

(3)X11/Xauth.h: No such file or directory

下载libXau-1.0.9.tar.gz,然后使用3.1.1同样的方法配置和安装libXau。

(4)cannot find -lXau

由于已经完成了libXau的安装,因此libXau.so库已经存在X11/lib目录中。这时编译器却找不到它。因此需要指定库的路径。在env.sh中添加LD_LIBRARY_PATH设置,如下所示:

export PREFIX=/home/liyihai/downloads/libX11_install
export HOST=arm-arago-linux-gnueabi
export LD_LIBRARY_PATH=$PREFIX/lib
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig

执行source env.sh命令使其生效。

继续编译libxcb,这时没有新的错误。编译成功后make install安装即可。

3.1.6 X11/extensions/xf86bigfproto.h: No such file or directory

下载xorgproto-2020.1.tar.bz2(可到这里下载更新版本),解压,然后使用3.1.1同样的方法配置和安装即可。

wget https://xorg.freedesktop.org/archive/individual/proto/xorgproto-2020.1.tar.bz2

3.1.7  x11/extensions/XShm.h: No such file or directory

下载libXext-1.3.4.tar.gz(可到这里下载更新版本),解压,然后使用3.1.1同样的方法配置和安装即可。

3.1.8  X11/xshmfence.h: No such file or directory

下载libxshmfence_1.3.orig.tar.gz,(新版本)解压,然后使用3.1.1同样的方法配置和安装即可。

4 安装

安装libX11是最省事的,直接执行以下命令即可。

 make install

交叉编译libX11相关推荐

  1. QStardict移植到i.MX-287开发板

    经历几天的努力,终于将QStardict词典移植到了i.MX-287开发板,目前还有一些小bug,还要调试. 首先描述移植过程中遇到的问题: 1) 开发板光盘资料附带arm-linux-mulitil ...

  2. 在redhat9中交叉编译nano-X nxlib和fltk

    来自:http://tauruspdj.blog.163.com/blog/static/4312500620080279183197/ 1)编译nano-X(即microwindows-0.91) ...

  3. 交叉编译xorg-server

    交叉编译xorg-server 一.编译xorg-macros(xorg-macros-util-macros-1.19.1.tar.gz) 二.编译libfontenc(libfontenc_1.1 ...

  4. 树莓派学习::qt5.10.1交叉编译【带opengl ES2】到官方Raspbian Stretch

    qt5.10.1交叉编译[带opengl ES2]到官方Raspbian Stretch 本次更新是树莓派学习::qt5.10.1交叉编译[带opengl ES2](armv8 64位)的延续,这次编 ...

  5. X11VNC交叉编译

    X11VNC交叉编译(方案未成功) 介绍 一.编译libXext(libxext_1.3.4.orig.tar.gz) 二.编译libXdmcp(libxdmcp_1.1.3.orig.tar.gz) ...

  6. Golang的交叉编译问题

    参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM交叉编译和远程RPC

    TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...

  9. 用TensorRT针对AArch64用户的交叉编译示例

    用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...

最新文章

  1. 老李分享:Web Services 组件 2
  2. 三张图看遍Linux 性能监控、测试、优化工具
  3. 将某个网站嵌入到iframe的测试
  4. 修改Netbeas的注释结构
  5. P1428 小鱼比可爱(python3实现)
  6. 已有Unity工程升级到LWRP/HDRP后材质都变洋红色了,怎么办?
  7. 阿里涉足零售IoT的猜想
  8. yolov3模型识别不出训练图片_【AI论技】YOLOv3在标的物资产实时管理中的应用
  9. vue之神奇的动态按钮
  10. java构建层级json_java中json字符串格式化层级目录输出
  11. vant制作首页的加载中和暂无数据
  12. pcs7服务器一直显示在同步,【征文】PCS7 诡异的时间同步问题
  13. 国开计算机网络作业,国家开放大学 计算机网络 形考作业1 答案
  14. 高速信号的预加重(Pre-emphasis)和去加重(De-emphasis)
  15. Vue2项目使用mars3d
  16. 24岁想学插画来得及吗?零基础学插画需要了解这些
  17. 前端React教程第六课 认识栈调和、setState和Fiber架构
  18. 服务器发布Java jar包
  19. 如何定义一个高逼格的原生JS插件
  20. Excel工作表忘记密码后取消密码

热门文章

  1. cellpadding与cellspacing
  2. 钧道博物馆——022号藏品元早期钧窑红斑长颈瓶
  3. 【关键字】一些关键字用法总结
  4. FPGA采集AD7606全网最细讲解 提供串行和并行2套工程源码和技术支持
  5. 【学神】 1-9 硬盘分区及挂载
  6. 合阳中学2021高考成绩查询,合阳县2018年合阳中学、路井中学、黑池中学高考战况...
  7. 精简版Abp开发教程 - 第一章: 创建解决方案
  8. 横滨中文离线地图App上线
  9. 腾讯团队开源前端跨框架跨平台框架Omi
  10. C++(17):variant