我正在尝试交叉编译一个使用 GTK3 的程序。主机是运行 Ubuntu 22.04 的 x86_64。目标机器是运行 Debian (Bookworm) 的 arm64 或 aarch64。我已经使用 crosstools-ng 设置了交叉编译工具链。
我运行了这个命令:
aarch64-unknown-linux-gnu-gcc `pkg-config --cflags gtk+-3.0` test_window.c -o test_window_cross `pkg-config --libs gtk+-3.0`
但我收到了这样的回复:
在包含的文件中/home/user/x-tools/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot/usr/include/features.h:527, 从/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33, 从/home/user/x-tools/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot/usr/include/limits.h:26, 从/home/user/x-tools/aarch64-unknown-linux-gnu/lib/gcc/aarch64-unknown-linux-gnu/13.2.0/include/limits.h:205, 从/home/user/x-tools/aarch64-unknown-linux-gnu/lib/gcc/aarch64-unknown-linux-gnu/13.2.0/include/syslimits.h:7, 从/home/user/x-tools/aarch64-unknown-linux-gnu/lib/gcc/aarch64-unknown-linux-gnu/13.2.0/include/limits.h:34, 从/usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:11, 从/usr/include/glib-2.0/glib/gtypes.h:32, 从/usr/include/glib-2.0/glib/galloca.h:32, 从/usr/include/glib-2.0/glib.h:30, 从/usr/include/gtk-3.0/gdk/gdkconfig.h:13, 从/usr/include/gtk-3.0/gdk/gdk.h:30, 从/usr/include/gtk-3.0/gtk/gtk.h:30, 从测试窗口.c:1: /usr/include/x86_64-linux-gnu/gnu/stubs.h:7:11: 致命错误:gnu/stubs-32.h:没有这样的文件或目录 7 | #包括<gnu/stubs-32.h> | ^~~~~~~~~~~~~~~~ 编译终止。
我认为这种情况发生是因为我的电脑上没有 arm64 的 gtk 包。因此,我运行以下命令,使用 apt 安装 arm64 版本的 gtk 包 (libgtk-3-dev)。
sudo apt install libgtk-3-dev:arm64
我收到了这样的回复:
正在读取软件包列表...完成 构建依赖关系树...完成 正在读取状态信息...完成 某些软件包无法安装。这可能意味着您有 请求一个不可能的情况,或者如果你正在使用不稳定 发行版中某些必需的软件包尚未创建 或已移出传入。 以下信息可能有助于解决该情况: 以下软件包具有未满足的依赖关系: libgdk-pixbuf-2.0-0:损坏:libgdk-pixbuf2.0-0:arm64(<2.40.0+dfsg-6~)但需要安装 2.40.0+dfsg-3ubuntu0.4 libgdk-pixbuf2.0-0:arm64:依赖:libc6:arm64 (>= 2.17) 但无法安装 依赖:libglib2.0-0:arm64 (>= 2.48.0) 但无法安装 依赖:libjpeg8:arm64 (>= 8c) 但是它将不会被安装 依赖:libpng16-16:arm64 (>= 1.6.2-1) 但是它将不会被安装 依赖:libtiff5:arm64 (>= 4.0.3) 但是它将不会被安装 依赖:libx11-6:arm64 但是它将不会被安装 依赖:libgdk-pixbuf2.0-common:arm64(= 2.40.0+dfsg-3ubuntu0.4) libgdk-pixbuf2.0-bin:arm64:依赖:libc6:arm64 (>= 2.17) 但无法安装 依赖:libglib2.0-0:arm64 (>= 2.48.0) 但无法安装 libgdk-pixbuf2.0-dev:arm64:依赖:gir1.2-gdkpixbuf-2.0:arm64(= 2.40.0+dfsg-3ubuntu0.4)但不会安装 依赖: libglib2.0-dev:arm64 (>= 2.37.6) 但是它将不会被安装 依赖: libx11-dev:arm64 但是它将不会被安装 依赖: libpng-dev:arm64 (>= 1.6) 但是它将不会被安装 依赖: libpng-dev:arm64 (< 1.7) 但是它将不会被安装 libgtk-3-common:损坏:libgtk-3-dev:arm64(< 3.24.30-3~)但需要安装 3.24.20-0ubuntu1.1 libgtk-3-dev:arm64:依赖:gir1.2-gtk-3.0:arm64(= 3.24.20-0ubuntu1.1)但不会安装 依赖: libatk-bridge2.0-dev:arm64 但是它将不会被安装 依赖: libatk1.0-dev:arm64 (>= 2.15.1) 但是它将不会被安装 依赖:libcairo2-dev:arm64 (>= 1.14.0) 但是它将不会被安装 依赖: libegl1-mesa-dev:arm64 但是它将不会被安装 依赖: libepoxy-dev:arm64 (>= 1.0) 但是它将不会被安装 依赖: libfontconfig1-dev:arm64 但是它将不会被安装 依赖:libfribidi-dev:arm64 (>= 0.19.7) 但是它将不会被安装 依赖: libglib2.0-dev:arm64 (>= 2.57.2) 但是它将不会被安装 依赖: libpango1.0-dev:arm64 (>= 1.41) 但是它将不会被安装 依赖: libwayland-dev:arm64 (>= 1.9.91) 但是它不会被安装 依赖: libx11-dev:arm64 但是它将不会被安装 依赖:libxcomposite-dev:arm64 但是它将不会被安装 依赖: libxcursor-dev:arm64 但是它将不会被安装 依赖: libxdamage-dev:arm64 但是它将不会被安装 依赖: libxext-dev:arm64 但是它将不会被安装 依赖: libxfixes-dev:arm64 但是它将不会被安装 依赖:libxi-dev:arm64 但是它将不会被安装 依赖: libxinerama-dev:arm64 但是它将不会被安装 依赖: libxkbcommon-dev:arm64 但是它将不会被安装 依赖: libxrandr-dev:arm64 但是它将不会被安装 依赖: dconf-gsettings-backend:arm64 但无法安装或 gsettings-后端:arm64 依赖:libgtk-3-0:arm64 (= 3.24.20-0ubuntu1.1) 但是它不会被安装 埃:错误,pkgProblemResolver::Resolve 生成中断,这可能是由持有的包裹引起的。
然后我去了这里然后我想到了使用 synaptic manager。我安装了 synaptic manager,并尝试安装 arm64 版本的 gtk 软件包。我在屏幕截图中看到了以下错误。(注意:我使用的是 synaptic 的 GUI 版本) 屏幕截图显示了 gtk 包可用的不同架构。
屏幕截图显示了当我尝试安装 libgtk-3-dev:arm64 时突触的响应
我有以下问题:
- 同一软件包在一台计算机上不可能有不同架构版本吗?如果不可能,我该如何解决屏幕截图中显示的问题?
- 安装 arm64 版本的 gtk 包是否会自动解决交叉编译期间遇到的错误?如果没有自动解决,我该如何解决?
我期待您的友好、积极和迅速的回复。
答案1
- 同一个软件包可能有不同的 Arch 版本...
你可以在备份后尝试此操作/etc/apt/sources.list和/var/lib/dpkg/状态文件。
$ sudo apt-get install -f
$ sudo dpkg --configure -a
$ sudo apt-get install -f
解决依赖关系问题并重试。如果此消息出现在最后一个命令之后,您可以轻松安装您的 arch 版本的 pkg
0 upgraded, 0 newly installed, 0 to remove, and 0 not upgraded.
- 尝试 1. 步骤,看看会发生什么...首先,一步一步....