交叉编译libxcb与X11

11 篇文章 1 订阅


最近做边缘网关,有个显示设备,我这边QT做视频处理,都已经调好了。。。不过某些原因更换了镜像,使用了xcb方式,要使用fb就要干掉xwindow无奈只好重新编译qt加上xcb的支持,不过这货又要我去编译xcb它来链接,网上一大堆编译教程杂乱无比,只好自己动手丰衣足食。
QT端的配置可以直接去QT添加XCB支持那里开始看

编译前提

点我前往官网自己找

源码地址更新日期
下载libxcb-1.14的源码2020-02-22
下载libxcb-proto-1.14的源码2020-02-22
下载libX11-1.6.9的源码2020-07-31
下载xtrans-1.4.0的源码2019-03-16

其他:

源码地址更新日期
libXext-1.3.42019-03-16
libXdmcp-1.1.32019-03-16
libXau-1.0.92019-02-10
xorg-server-1.20.82020-03-29
makedepend-1.0.62019-03-16
xorg-cf-files-1.0.62015-12-22
util-macros-1.19.22018-03-05
imake-1.0.82019-03-16
xcursor-themes-1.0.62019-02-15
xorgproto-2020.12020-04-14
font/font-util-1.3.22019-08-25
mesa-20.1.5 opengl2020-08-06
libdrm-2.4.1022020-05-26
libXrender-0.9.102016-10-04
libXrandr-1.5.22019-03-16
xcb-util-renderutil-0.3.92014-06-13
xcb-util-0.4.02014-10-15
Xi-1.7.102019-06-19
Xfixes-5.0.32016-10-04
xev-1.2.42020-07-17
pixman-0.40.02020-04-19
pciaccess-0.162019-07-17
xcb-util-image-0.4.02014-10-15
xcb-util-keysyms-0.4.02014-10-01
xcb-util-wm-0.4.12014-02-19
xkeyboard-config-2.302020-06-02

工具安装

sudo apt install xsltproc pkg-config perl xmlto fop -y
sudo apt install libxrandr-dev -y

编译X11

  • 出现问题:X11/Xtrans/Xtrans.h: No such file or directory
    说明X11依赖Xtrans
  • 出现问题:X11/X.h: No such file or directory
    说明X11依赖xorgproto
  • 出现问题:xcb/xcb.h: No such file or directory
    说明X11依赖xcb
  • 编译选项中:–host=编译后的产物运行在何种系统类型 --build=使用何种系统类型上编译源码,设置参考--host=aarch64-linux-gnu --build=x86_64-pc-linux-gnu或者x86_64-linux-gnu

编译依赖项Xtrans

#进入源码配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking 
#编译
make
#切换为root,去安装
su
make install

编译依赖项xorgproto

#进入源码配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking --enable-legacy
#编译
make
#切换为root,去安装
su
make install

XCB完成后编译X11

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ CFLAGS="-I/opt/X11_INSTALL/include -I/opt/XCB_INSTALL/include" LDFLAGS=-L/opt/XCB_INSTALL/lib ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking --enable-unix-transport --enable-tcp-transport --enable-ipv6 --enable-local-transport --enable-malloc0returnsnull
#编译
make
#切换为root,去安装
su
make install

X11完成

在这里插入图片描述

编译xcb

  • 出现问题:No package ‘xcb-proto’ found
    说明XCB依赖xcb-proto
  • 出现问题:X11/Xauth.h: No such file or directory
    说明XCB依赖libXau

编译依赖项xcb-proto

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

添加环境

sudo gedit ~/.bashrc
#文件尾部加入
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/XCB_INSTALL/lib/pkgconfig
#保存退出
source ~/.bashrc

编译依赖项libXau

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ CFLAGS=-I/opt/X11_INSTALL/include ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

最后编译xcb

官网查看相关编译选项和可生成的库的说明

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ CFLAGS=-I/opt/X11_INSTALL/include LDFLAGS=-L/opt/X11_INSTALL/lib ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

XCB完成

在这里插入图片描述

扩展编译Xrandr

依赖以下:

编译依赖项util-macros

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#切换为root,去安装
su
make install

编译依赖项Xrender

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking --enable-malloc0returnsnull
#编译
make
#切换为root,去安装
su
make install

编译依赖项Xext

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking --enable-malloc0returnsnull
#编译
make
#切换为root,去安装
su
make install

最后编译Xrandr

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking --enable-malloc0returnsnull
#编译
make
#切换为root,去安装
su
make install

编译xcb-util-renderutil

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

编译xcb-util

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

编译Xi

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking --enable-malloc0returnsnull
#编译
make
#切换为root,去安装
su
make install

编译依赖Xfixes

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking 
#编译
make
#切换为root,去安装
su
make install

编译Xdmcp

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ CFLAGS=-I/opt/X11_INSTALL/include ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

编译pixman

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

编译pciaccess

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

编译xcb-util-image

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ LDFLAGS="-L/opt/X11_INSTALL/lib -L/opt/XCB_INSTALL/lib -lXau -lxcb" ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

编译xcb-util-keysyms

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

编译xcb-util-wm

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/XCB_INSTALL --host=arm-linux --enable-option-checking
#切换为root,去安装
su
make install

编译xev(可忽略项)

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ LDFLAGS="-L/opt/X11_INSTALL/lib -L/opt/XCB_INSTALL/lib -lXau -lxcb -lXrender -lXext -lX11" ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换为root,去安装
su
make install

QT添加XCB支持

前提

我的qt源码版本:5.14.1
则需要的库文件如下:

源码地址更新日期
xcb-util-image-0.3.92012-05-31
xcb-util-keysyms-0.3.92012-05-31
xcb-util-wm-0.3.92012-05-31
xcb-util-renderutil-0.3.92014-06-13
xcb-1.132018-03-05
xcb-proto-1.132018-03-05

这么简单?怎么可能还有一些依赖,复制粘贴吧不要一个个下载了

#!/bin/sh
wget -c https://www.x.org/releases/individual/xcb/xcb-util-image-0.3.9.tar.gz
wget -c https://www.x.org/releases/individual/xcb/xcb-util-keysyms-0.3.9.tar.gz
wget -c https://www.x.org/releases/individual/xcb/xcb-util-wm-0.3.9.tar.gz
wget -c https://www.x.org/releases/individual/xcb/xcb-util-renderutil-0.3.9.tar.gz
wget -c https://www.x.org/releases/individual/xcb/libxcb-1.13.tar.gz
wget -c https://www.x.org/releases/individual/xcb/xcb-proto-1.13.tar.gz
wget -c https://www.x.org/releases/individual/lib/libXau-1.0.9.tar.gz
wget -c https://www.x.org/releases/individual/proto/xorgproto-2020.1.tar.gz
wget -c https://www.x.org/releases/individual/xcb/xcb-util-0.3.9.tar.gz

根据下载的源码,查看需要编译的版本,这点很重要!
在这里插入图片描述
在这里插入图片描述

编译

编译过程上面就有自己找吧

QT端源码配置

  • 可以查看我的qt自动安装脚本
  • 增加两个库的链接 -lxcb -lXau
    在这里插入图片描述
  • 按照脚本编译安装即可
    对于增加配置项,配置检测不过问题的排查
    如果配置项依赖外部库那么
    进入源码目录找到config.log文件寻找其中的
    undefined reference to xxx关键字查看它的编译指 链接指令 查找库的路径等是不是正确的

编译成功效果如下
在这里插入图片描述

qt开启 -xkbcommon

官网:https://www.xkbcommon.org/
库源码下载地址

前提条件

sudo apt install ninja meson -y

meson据说开始替代cmake,autogen有那么好吗
交叉编译用它还要写个文件,我的天,写就写吧.

编译依赖xkeyboard-config

#进入源码配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/X11_INSTALL --host=arm-linux --enable-option-checking 
#编译
make
#切换为root,去安装
su
make install

PS:配置选项中我禁用了X11,这货要求检查版本大于等于1.10,不过我用的最新的源码编译,出来的库是1.0.0我的问题还是它的问题,我估计是它的问题。

2021-10-26更新:建议参考评论区设置下pkgconfig变量,如遇错误同时看下错误日志,关于pkgconfig 解释
建议使用编译工具链的pkg文件路径:和xcb的安装目录下的pkg文件路径

在这里插入图片描述

在这里插入图片描述

最终编译xkbcommon

建立文件名为cross.txt

[binaries]
c = '/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc'
cpp = '/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++'
ar = '/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar'
strip = '/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip'
ld = '/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld'
#pkgconfig = 'aarch64-linux-gnu-pkg-config'

[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'ARM'
endian = 'little'

[build_machine]
system = 'linux'
cpu_family = 'x86_64'
cpu = 'i686'
endian = 'little'

在源码根目录执行以下命令

#配置
meson builddir/ --prefix /opt/TEST_INSTALL --buildtype release --cross-file cross.txt -Denable-x11=false -Denable-wayland=false -Denable-docs=false --libdir /opt/xkbcommon_INSTALL/lib
#编译安装
ninja -C builddir install

QT源码端配置

  • 配置项加上-xkbcommon
  • 配置项加上链接项 -L/opt/xkbcommon_INSTALL/lib
  • 配置项加上包含项 -I/opt/xkbcommon_INSTALL/include
  • 最后编译即可

以上步骤不对则编译qt会出现,找不到库文件的错误

ERROR: Feature ‘xkbcommon’ was enabled, but the pre-condition ‘libs.xkbcommon’ failed.

QT开启opengl支持

安装相关软件包

sudo apt install gperf util-linux

opengl仓库地址:ftp://ftp.freedesktop.org/pub/mesa
依赖项:util-linux-2.36可能不需要,先保留这里备用

源码地址更新日期
Xorg Libraries使用脚本安装
以下是运行脚本前需进行安装的
freetype-2.10.22020-05-09
fontconfig-2.13.12018-08-30
util-linux-2.362020-06-09
libuuid-1.0.32016-11-29
libxml2-2.9.102019/10/30
Python-3.8.62020-09-23
expat-2.2.92019-09-26
glu-9.0.12019-07-23
glut-7.9.22012-04-19
glw-8.0.02012-05-22
glfw-3.3.22020-01-20
mesa-20.2.12020-10-15
mesa-demos-8.4.02018-02-23

编译依赖libuuid

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/OPENGL_INSTALL --host=arm-linux --enable-option-checking
#编译
make
#切换权限,并安装
su
make install

编译python依赖expat

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/OPENGL_INSTALL --host=arm-linux --enable-option-checking --without-docbook
#编译
make
#切换权限,并安装
su
make install

编译Python3.8.6

#更新主机的python
sudo apt-get install python3.8 -y
#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ LDFLAGS=-L/opt/OPENGL_INSTALL/lib CFLAGS=-I/opt/OPENGL_INSTALL/include ./configure --prefix=/opt/PYTHON_INSTALL --host=aarch64-linux-gnu --build=x86_64-pc-linux-gnu --enable-option-checking --with-system-expat --with-system-ffi --with-ensurepip=yes --enable-shared --enable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no --with-system-expat -with-ensurepip=yes
#编译
make
#切换权限,并安装
su
make install

出现问题subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1.
网上多数删除此lsb_release文件,不建议,容易出现其他问题

#暂时移动到其他目录
mv /usr/bin/lsb_release ../
#再次安装
make install
#恢复
mv ../lsb_release /usr/bin/

编译libxml2-2.9.10

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ./configure --prefix=/opt/OPENGL_INSTALL --host=arm-linux --enable-option-checking --with-history --with-python=/opt/PYTHON_INSTALL
#编译
make
#切换权限,并安装
su
make install

安装Xorg Libraries

建立下载地址列表,以下保存为:lib-7.md5

ce2fb8100c6647ee81451ebe388b17ad  xtrans-1.4.0.tar.bz2
55adbfb6d4370ecac5e70598c4e7eed2  libX11-1.6.9.tar.bz2
f5b48bb76ba327cd2a8dc7a383532a95  libXext-1.3.4.tar.bz2
4e1196275aa743d6ebd3d3d5ec1dff9c  libFS-1.0.8.tar.bz2
76d77499ee7120a56566891ca2c0dbcf  libICE-1.0.10.tar.bz2
87c7fad1c1813517979184c8ccd76628  libSM-1.2.3.tar.bz2
eeea9d5af3e6c143d0ea1721d27a5e49  libXScrnSaver-1.2.3.tar.bz2
a9019421d3ee8b4937b6afd9025f018a  libXt-1.2.0.tar.bz2
ac774cff8b493f566088a255dbf91201  libXmu-1.1.3.tar.bz2
6f0ecf8d103d528cfc803aa475137afa  libXpm-3.5.13.tar.bz2
e5e06eb14a608b58746bdd1c0bd7b8e3  libXaw-1.0.13.tar.bz2
07e01e046a0215574f36a3aacb148be0  libXfixes-5.0.3.tar.bz2
3fa0841ea89024719b20cd702a9b54e0  libXcomposite-0.4.5.tar.bz2
802179a76bded0b658f4e9ec5e1830a4  libXrender-0.9.10.tar.bz2
9b9be0e289130fb820aedf67705fc549  libXcursor-1.2.0.tar.bz2
e3f554267a7a04b042dc1f6352bd6d99  libXdamage-1.1.5.tar.bz2
6447db6a689fb530c218f0f8328c3abc  libfontenc-1.1.4.tar.bz2
00516bed7ec1453d56974560379fff2f  libXfont2-2.0.4.tar.bz2
4a433c24627b4ff60a4dd403a0990796  libXft-2.3.3.tar.bz2
62c4af0839072024b4b1c8cbe84216c7  libXi-1.7.10.tar.bz2
0d5f826a197dae74da67af4a9ef35885  libXinerama-1.1.4.tar.bz2
18f3b20d522f45e4dadd34afb5bea048  libXrandr-1.5.2.tar.bz2
5d6d443d1abc8e1f6fc1c57fb27729bb  libXres-1.2.0.tar.bz2
ef8c2c1d16a00bd95b9fdcef63b8a2ca  libXtst-1.2.3.tar.bz2
210b6ef30dda2256d54763136faa37b9  libXv-1.0.11.tar.bz2
3569ff7f3e26864d986d6a21147eaa58  libXvMC-1.0.12.tar.bz2
0ddeafc13b33086357cfa96fae41ee8e  libXxf86dga-1.1.5.tar.bz2
298b8fff82df17304dfdb5fe4066fe3a  libXxf86vm-1.1.4.tar.bz2
d2f1f0ec68ac3932dd7f1d9aa0a7a11c  libdmx-1.1.4.tar.bz2
b34e2cbdd6aa8f9cc3fa613fd401a6d6  libpciaccess-0.16.tar.bz2
dd7e1e946def674e78c0efbc5c7d5b3b  libxkbfile-1.1.0.tar.bz2
42dda8016943dc12aff2c03a036e0937  libxshmfence-1.3.tar.bz2

建立下载脚本:down.sh并添加可执行权限

#!/bin/sh
mkdir lib &&
cd lib &&
grep -v '^#' ../lib-7.md5 | awk '{print $2}' | wget -i- -c \
    -B https://www.x.org/pub/individual/lib/ &&
md5sum -c ../lib-7.md5

建立编译安装脚本:install.sh,修改为自己的安装路径和编译器,最后添加可执行权限

#!/bin/sh

#设置安装目录
PREFIX_INSTALL=/opt/OPENGL_INSTALL

#配置交叉编译
export CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc 
export CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
export CFLAGS="-I$PREFIX_INSTALL/include -I/opt/X11_INSTALL/include -I/opt/XCB_INSTALL/include -I/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/include"
export LDFLAGS="-L$PREFIX_INSTALL/lib -L/opt/X11_INSTALL/lib -L/opt/XCB_INSTALL/lib -L/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/lib"

#XORG_CONFIG=$PREFIX_INSTALL
XORG_PREFIX=$PREFIX_INSTALL
ROOT_PATH=`pwd`

#配置root权限
as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}


#解压并配置安装
do_make(){

cd $ROOT_PATH/lib

for package in $(grep -v '^#' ../lib-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.bz2}
  tar -xf $package
#  pushd $packagedir
	cd $packagedir

  docdir="--docdir=$XORG_PREFIX/share/doc/$packagedir"
  case $packagedir in
    libICE* )
      ./configure $XORG_CONFIG $docdir ICE_LIBS=-lpthread \
									--prefix=$PREFIX_INSTALL --host=arm-linux
    ;;

    libXfont2-[0-9]* )
      ./configure $XORG_CONFIG $docdir --disable-devel-docs \
									--prefix=$PREFIX_INSTALL --host=arm-linux
    ;;

    libXt-[0-9]* )
      ./configure $XORG_CONFIG $docdir \
                  --with-appdefaultdir=/etc/X11/app-defaults \
									--prefix=$PREFIX_INSTALL --host=arm-linux \
									--enable-malloc0returnsnull
    ;;
	libSM-[0-9]*)
	 ./configure --prefix=$PREFIX_INSTALL --host=arm-linux \
									--enable-option-checking
		 	echo "\033[1;33m make $package NOW\033[0m"
		;;
    * )
      ./configure $XORG_CONFIG $docdir --prefix=$PREFIX_INSTALL --host=arm-linux \
									--enable-malloc0returnsnull
			echo "\033[1;33m make other NOW\033[0m"
    ;;
  esac
  make
	if [ $? = 0 ]; then 
    echo "\033[1;33m make $package ok\033[0m"
  else 
    echo "\033[1;33m make $package error\033[0m"
		exit
  fi 
  #make check 2>&1 | tee ../$packagedir-make_check.log
  as_root make install
#  popd
	cd -
  rm -rf $packagedir
  as_root /sbin/ldconfig
done
}

#编译依赖项
do_make_dependencies()
{
	cd $ROOT_PATH
	#下载源码
	mkdir depend_lib &&
	cd depend_lib &&
	wget -c https://download.savannah.gnu.org/releases/freetype/freetype-2.10.2.tar.gz &&
	wget -c https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.13.1.tar.bz2 &&
	wget -c https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.36/util-linux-2.36.tar.gz &&
	tar -xf util-linux-2.36.tar.gz &&
	tar -xf fontconfig-2.13.1.tar.bz2 &&
	tar -xf freetype-2.10.2.tar.gz &&
	cd freetype-2.10.2 &&
	
	sed -ri "s:.*(AUX_MODULES.*valid):\1:" modules.cfg &&
	
	sed -r "s:.*(#.*SUBPIXEL_RENDERING) .*:\1:" \
	    -i include/freetype/config/ftoption.h  &&
	
	./configure --prefix=$PREFIX_INSTALL --host=arm-linux --enable-freetype-config --disable-static &&
	make
	as_root make install &&

	cd ..
	cd util-linux-2.36 &&
	./configure --prefix=$PREFIX_INSTALL --host=arm-linux \
						--enable-option-checking \
						--without-python \
						--without-tinfo \
						--without-ncursesw \ 
						--without-ncurses
	make -j4
	as_root make install

	cd ..
	cd fontconfig-2.13.1 &&
	#Make sure the system regenerates src/fcobjshash.h
	rm -f src/fcobjshash.h
	./configure --prefix=$PREFIX_INSTALL \
		--host=aarch64-linux-gnu \
		--sysconfdir=/etc \
		--localstatedir=/var \
		--enable-libxml2 \
		--disable-docs &&     
	make
	as_root make install
	cd $ROOT_PATH
}
#编译依赖项
do_make_dependencies
#编译主体
do_make

exit

终端中执行以下命令

#下载原码
./down.sh
#编译安装源码
./install.sh

编译glfw

#配置
CC=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/usr/local/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ cmake -DCMAKE_INSTALL_PREFIX=/opt/OPENGL_INSTALL -DCMAKE_C_FLAGS="-L/opt/X11_INSTALL/lib -L/opt/OPENGL_INSTALL/lib -L/opt/XCB_INSTALL/lib -I/opt/X11_INSTALL/include -I/opt/OPENGL_INSTALL/include -I/opt/XCB_INSTALL/include -lxcb -lXau -lm" ..
#编译
make
#切换权限,并安装
su
make install

最繁琐的一次,未完待续。。。

  • 10
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论
回答: 交叉编译libxcbX11是为了在特定的环境中使用XCB库和X11库。根据引用\[1\]中的描述,编译libxcbX11需要安装一些前提工具和依赖项,如Xtrans、xorgproto、xcb-proto、libXau等。具体的编译过程可以参考引用\[1\]中提供的步骤。在编译过程中可能会遇到一些问题,比如引用\[2\]中提到的找不到xcb-proto和libXau的错误。解决这些问题可以根据引用\[2\]中给出的配置和编译命令进行操作。最后,根据引用\[3\]中的描述,可能还会遇到xcb-util-wm的错误,如果有人知道如何解决这个问题,可以提供详细的解决办法。总之,交叉编译libxcbX11需要按照一定的步骤和依赖项进行操作,遇到问题可以参考相关的文档或寻求帮助。 #### 引用[.reference_title] - *1* *2* [交叉编译libxcbX11](https://blog.csdn.net/weixin_42892101/article/details/107852277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [libX11libxcb交叉编译](https://blog.csdn.net/hx0318/article/details/123196945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

aron566

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

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

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

打赏作者

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

抵扣说明:

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

余额充值