交叉编译libxcb与X11

2023-11-17

交叉编译libxcb与X11


最近做边缘网关,有个显示设备,我这边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.4 2019-03-16
libXdmcp-1.1.3 2019-03-16
libXau-1.0.9 2019-02-10
xorg-server-1.20.8 2020-03-29
makedepend-1.0.6 2019-03-16
xorg-cf-files-1.0.6 2015-12-22
util-macros-1.19.2 2018-03-05
imake-1.0.8 2019-03-16
xcursor-themes-1.0.6 2019-02-15
xorgproto-2020.1 2020-04-14
font/font-util-1.3.2 2019-08-25
mesa-20.1.5 opengl 2020-08-06
libdrm-2.4.102 2020-05-26
libXrender-0.9.10 2016-10-04
libXrandr-1.5.2 2019-03-16
xcb-util-renderutil-0.3.9 2014-06-13
xcb-util-0.4.0 2014-10-15
Xi-1.7.10 2019-06-19
Xfixes-5.0.3 2016-10-04
xev-1.2.4 2020-07-17
pixman-0.40.0 2020-04-19
pciaccess-0.16 2019-07-17
xcb-util-image-0.4.0 2014-10-15
xcb-util-keysyms-0.4.0 2014-10-01
xcb-util-wm-0.4.1 2014-02-19
xkeyboard-config-2.30 2020-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.9 2012-05-31
xcb-util-keysyms-0.3.9 2012-05-31
xcb-util-wm-0.3.9 2012-05-31
xcb-util-renderutil-0.3.9 2014-06-13
xcb-1.13 2018-03-05
xcb-proto-1.13 2018-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.2 2020-05-09
fontconfig-2.13.1 2018-08-30
util-linux-2.36 2020-06-09
libuuid-1.0.3 2016-11-29
libxml2-2.9.10 2019/10/30
Python-3.8.6 2020-09-23
expat-2.2.9 2019-09-26
glu-9.0.1 2019-07-23
glut-7.9.2 2012-04-19
glw-8.0.0 2012-05-22
glfw-3.3.2 2020-01-20
mesa-20.2.1 2020-10-15
mesa-demos-8.4.0 2018-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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交叉编译libxcb与X11 的相关文章

  • QLineEdit:显示处理后的文本,而不是输入的文本,但保留它(自定义回显模式)

    我想要一个QLineEdit不显示输入的文本 而是显示经过处理的版本 同时保留原始文本并在通过请求时返回它text 就像密码回显模式一样 但我不希望每个字符都被屏蔽 我想虚拟化空间 例如什么时候some text with spaces i
  • 如何将图标放置到 QLineEdit 上?

    stackoverflow com 网站的右上角有一个带有放大镜头的搜索字段和一个灰色的 搜索 关键字 我想知道是否有可能实现相同的外观QLineEdit 如果是这样那怎么办 QLineEdit lineEdit new QLineEdit
  • QT 中只获取文件而不获取目录?

    当我这样做时 QDir myDir home some location QStringList filesList myDir entryList 它返回该位置内的文件和目录 但我只想要文件 并且这些文件可以具有任意扩展名 有任何想法吗
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

    有没有一种安全的方法可以在不调用 QApplication exec 的情况下使用 Qt 我有许多不同的对象正在对多个资源执行长期进程 至少其中一个正在与 Web 应用程序服务器进行通信 我正在制作一个 GUI 应用程序 提示用户在正确的时
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • Qt中如何获取鼠标在屏幕上的位置?

    我想获取屏幕上的鼠标坐标 我怎样才能在 Qt 中做到这一点 在 Windows 上 使用 C 我正在做类似答案中建议的事情对于这个问题 https stackoverflow com q 11737665 1420197 正如文档所述 QC
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • 从布局中按名称获取小部件

    如果我想从 python Qt 的布局中获取特定的小部件 我应该如何进行 到目前为止我所做的 for i in range self ui horizontalLayout 14 count here it does fail name s
  • Qt 文件对话框默认后缀不起作用

    我将以下代码用于 QtQuick Dialogs 1 3 和 Qt 5 10 0 下 filedialog 的新属性 我使用 Qt Creator 5 10 默认套件构建它 import QtQuick 2 10 import QtQuic
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Qt 插槽是否与其他代码并行运行?

    在此函数示例中 void MyClass myFunction emit MySignal1 emit MySignal2 如果我有slot1倾听MySignal1 and slot2倾听MySignal2 1 Is slot1总是会在之前
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http

随机推荐