Qt5交叉编译记录

前言

使用野火交叉编译Qt库(Qt5)进行linux平台的交叉编译qt5.15.2,发现一些问题。具体是指编译时,执行到4.1.2.2 创建sysroot目录发生了一些问题,导致编译检查时发现缺少以下库文件

  • xcb
  • eglfs
  • fontxconfig
  • tslib
  • system-sqlite

在不同的平台上多次尝试创建sysroot目录,尝试debian10,debian11均无果。最后在该教程中提到的sysroot_debian10.tar.gz部署以后,终于可以正常完成编译。

然后就产生了好奇,为什么我自己从机器上实际同步到编译主机的库文件就找不到呢?

一、排查思路

1. 排查野火给的库文件和从机器上同步的库文件目录的区别

按照泰山派的资料导入板载系统镜像
【立创·泰山派RK3566开发板】板载系统镜像提取

# 创建目录
mkdir -p ~/WorkSpace/rootfs

# 从嵌入式机器上导入库文件
sudo rsync -avx root@192.168.50.113:/ ~/WorkSpace/rootfs

# 对比lib目录
diff -rq --brief ~/WorkSpace/sysroot/lib ~/WorkSpace/rootfs/lib | grep "Only in /home/yoooola/WorkSpace/sysroot" > missing_lib_files.txt
# 对比usr目录
diff -rq --brief ~/WorkSpace/sysroot/usr ~/WorkSpace/rootfs/usr | grep "Only in /home/yoooola/WorkSpace/sysroot" > missing_usr_files.txt

1.1 分析对比结果

xcb,eglfs,fontconfig,tslib,system-sqlite 关键文件查找结果

yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -path '*plugins/platforms/*eglfs*' 2>/dev/null
sysroot/usr/lib/aarch64-linux-gnu/qt5/plugins/platforms/libqeglfs.so
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -path '*plugins/platforms/*eglfs*' 2>/dev/null
rootfs/usr/lib/aarch64-linux-gnu/qt5/plugins/platforms/libqeglfs.so
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -name 'libfontconfig*.so*' 2>/dev/null
sysroot/usr/lib/aarch64-linux-gnu/libfontconfig.so
sysroot/usr/lib/aarch64-linux-gnu/libfontconfig.so.1
sysroot/usr/lib/aarch64-linux-gnu/libfontconfig.so.1.12.0
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -name 'libfontconfig*.so*' 2>/dev/null
rootfs/usr/lib/aarch64-linux-gnu/libfontconfig.so.1
rootfs/usr/lib/aarch64-linux-gnu/libfontconfig.so.1.12.0
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -name '*libts*.so*' 2>/dev/null
sysroot/usr/lib/gcc/aarch64-linux-gnu/8/libtsan.so
sysroot/usr/lib/aarch64-linux-gnu/libts.so.0
sysroot/usr/lib/aarch64-linux-gnu/libtsan.so.0.0.0
sysroot/usr/lib/aarch64-linux-gnu/libtsan.so.0
sysroot/usr/lib/aarch64-linux-gnu/libts.so
sysroot/usr/lib/aarch64-linux-gnu/libts.so.0.10.1
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -name '*libts*.so*' 2>/dev/null
rootfs/usr/lib/gcc/aarch64-linux-gnu/8/libtsan.so
rootfs/usr/lib/aarch64-linux-gnu/libtsan.so.0.0.0
rootfs/usr/lib/aarch64-linux-gnu/libtsan.so.0
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -name 'libsqlite3.so*' 2>/dev/null
sysroot/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
sysroot/usr/lib/aarch64-linux-gnu/libsqlite3.so
sysroot/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -name 'libsqlite3.so*' 2>/dev/null
rootfs/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
rootfs/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$

1.2 如果直接使用从机器上同步的库文件进行编译

报错内容如下

yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ ./build-qt.sh
start configure platform...
#
# qmake configuration for the LubanCat running Linux for debian10
#

include(../common/linux_device_pre.conf)

QMAKE_LIBS_EGL         += -lEGL -lmali
QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL -lmali
QMAKE_CFLAGS            = -march=armv8-a
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
QMAKE_LFLAGS += -static-libstdc++

QMAKE_INCDIR_POST +=          $$[QT_SYSROOT]/usr/include          $$[QT_SYSROOT]/usr/include/$${GCC_MACHINE_DUMP}
QMAKE_LIBDIR_POST +=          $$[QT_SYSROOT]/usr/lib          $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP}          $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP}
QMAKE_RPATHLINKDIR_POST +=          $$[QT_SYSROOT]/usr/lib          $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP}          $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP}

DISTRO_OPTS += aarch64
DISTRO_OPTS += deb-multi-arch

include(../common/linux_arm_device_post.conf)
load(qt_config)
done...
start configure qt-everywhere-src-5.15.8...
+ cd qtbase
+ /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/configure -top-level -sysroot /home/yoooola/WorkSpace/rootfs -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all
Creating qmake...
make: Nothing to be done for 'first'.
Command line: -sysroot /home/yoooola/WorkSpace/rootfs -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all

This is the Qt Open Source Edition.

You have already accepted the terms of the Open Source license.

Running configuration tests...
Checking for machine tuple...
+ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -dumpmachine
> aarch64-linux-gnu
test config.qtbase.tests.machineTuple succeeded
Checking for valid makespec...
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_CFLAGS += --sysroot=/home/yoooola/WorkSpace/rootfs" "QMAKE_CXXFLAGS += --sysroot=/home/yoooola/WorkSpace/rootfs" "QMAKE_LFLAGS += --sysroot=/home/yoooola/WorkSpace/rootfs" -early "CONFIG += cross_compile" /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make
> rm -f verifyspec.o
> rm -f *~ core *.core
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -c -march=armv8-a --sysroot=/home/yoooola/WorkSpace/rootfs --sysroot=/home/yoooola/WorkSpace/rootfs -O2 -w -fPIC  -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec -I. -I/home/yoooola/WorkSpace/rootfs/usr/include -I/home/yoooola/WorkSpace/rootfs/usr/include/aarch64-linux-gnu -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/mkspecs/devices/linux-lubancat-g++ -o verifyspec.o /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec/verifyspec.cpp
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -static-libstdc++ --sysroot=/home/yoooola/WorkSpace/rootfs --sysroot=/home/yoooola/WorkSpace/rootfs -Wl,-O1 -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/usr/lib -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu -o verifyspec verifyspec.o     -L/home/yoooola/WorkSpace/rootfs/usr/lib -L/home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu -L/home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:68: verifyspec] Error 1
Note: Also available for Linux: linux-clang linux-icc

ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
done...
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$

可以看到,主要的报错内容如下

> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:68: verifyspec] Error 1

这些文件在两个文件夹下的相对位置分析

yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ sudo find rootfs/ -name "crt1.o"
rootfs/usr/lib/aarch64-linux-gnu/crt1.o
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ sudo find sysroot/ -name "crt1.o"
sysroot/usr/lib/aarch64-linux-gnu/crt1.o

可以发现,两个文件在两个文件夹下的目录相同,可以说明,并不是文件不存在,而是编译脚本问题。

使用野火的官方库文件目录进行对比,看编译环境到底有什么区别

start configure platform...
#
# qmake configuration for the LubanCat running Linux for debian10
#

include(../common/linux_device_pre.conf)

QMAKE_LIBS_EGL         += -lEGL -lmali
QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL -lmali
QMAKE_CFLAGS            = -march=armv8-a
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
QMAKE_LFLAGS += -static-libstdc++

QMAKE_INCDIR_POST +=          $$[QT_SYSROOT]/usr/include          $$[QT_SYSROOT]/usr/include/$${GCC_MACHINE_DUMP}
QMAKE_LIBDIR_POST +=          $$[QT_SYSROOT]/usr/lib          $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP}          $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP}
QMAKE_RPATHLINKDIR_POST +=          $$[QT_SYSROOT]/usr/lib          $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP}          $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP}

DISTRO_OPTS += aarch64
DISTRO_OPTS += deb-multi-arch

include(../common/linux_arm_device_post.conf)
load(qt_config)
done...
start configure qt-everywhere-src-5.15.8...
+ cd qtbase
+ /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/configure -top-level -sysroot /home/yoooola/WorkSpace/sysroot -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all
Creating qmake...
make: Nothing to be done for 'first'.
Command line: -sysroot /home/yoooola/WorkSpace/sysroot -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all

This is the Qt Open Source Edition.

You have already accepted the terms of the Open Source license.

Running configuration tests...
Checking for machine tuple...
+ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -dumpmachine
> aarch64-linux-gnu
test config.qtbase.tests.machineTuple succeeded
Checking for valid makespec...
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_CFLAGS += --sysroot=/home/yoooola/WorkSpace/sysroot" "QMAKE_CXXFLAGS += --sysroot=/home/yoooola/WorkSpace/sysroot" "QMAKE_LFLAGS += --sysroot=/home/yoooola/WorkSpace/sysroot" -early "CONFIG += cross_compile" /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make
> rm -f verifyspec.o
> rm -f *~ core *.core
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -c -march=armv8-a --sysroot=/home/yoooola/WorkSpace/sysroot --sysroot=/home/yoooola/WorkSpace/sysroot -O2 -w -fPIC  -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec -I. -I/home/yoooola/WorkSpace/sysroot/usr/include -I/home/yoooola/WorkSpace/sysroot/usr/include/aarch64-linux-gnu -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/mkspecs/devices/linux-lubancat-g++ -o verifyspec.o /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec/verifyspec.cpp
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -static-libstdc++ --sysroot=/home/yoooola/WorkSpace/sysroot --sysroot=/home/yoooola/WorkSpace/sysroot -Wl,-O1 -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/usr/lib -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/lib/aarch64-linux-gnu -o verifyspec verifyspec.o     -L/home/yoooola/WorkSpace/sysroot/usr/lib -L/home/yoooola/WorkSpace/sysroot/lib/aarch64-linux-gnu -L/home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu
test config.qtbase.tests.verifyspec succeeded
Checking for target architecture...

1.3 一点点小观察

从机器获取到的文件的权限是 root root, 不是 yoooola yoooola。尝试从机器重新拷贝文件:

# 首先要改变文件的权限
# 我这里直接删除rootfs文件夹,然后重新以非管理员用户创建文件
sudo rm -rf ~/WorkSpace/rootfs
mkdir -p ~/WorkSpace/rootfs

# 从嵌入式机器上导入库文件,以cat用户读取文件
rsync -avx cat@192.168.50.113:/ ~/WorkSpace/rootfs

1.4 再次观察

yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS/lib$ ll
总用量 8
drwxr-xr-x 2 yoooola yoooola 4096 7月  22 20:18 ./
drwxr-xr-x 4 yoooola yoooola 4096 7月  22 20:17 ../
lrwxrwxrwx 1 yoooola yoooola    7 7月   1  2024 lib -> usr/lib
# 但是这里的链接错了,应该指向../usr/lib
# 去开发版上查看
cat@lubancat:/$ ls -l
total 5640
lrwxrwxrwx   1 root root       7 Jul  1  2024 bin -> usr/bin
drwxr-xr-x   7 root root    4096 Feb 14 18:12 boot
drwxr-xr-x  17 root root    4100 Feb 14 18:26 dev
drwxrwxr-x 110 1001 1001    4096 Jul 19  2025 etc
drwxr-xr-x   3 1001 1001    4096 Sep  4  2023 home
lrwxrwxrwx   1 root root       7 Jul  1  2024 lib -> usr/lib
...
lrwxrwxrwx   1 root root       8 Jul  1  2024 sbin -> usr/sbin
drwxr-xr-x   2 root root    4096 Jul  1  2024 srv
...
drwxrwxr-x  10 1001 1001    4096 Feb 14 18:12 usr

# 可以明确看到,lib -> usr/lib

所以,我猜,需要改变编译服务器的文件夹的指向

yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS$ rm lib
yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS$ ln -sf usr/lib/ lib
yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS$ ll
总用量 12
drwxr-xr-x 3 yoooola yoooola 4096 7月  22 22:02 ./
drwxr-xr-x 5 yoooola yoooola 4096 7月  22 21:55 ../
lrwxrwxrwx 1 yoooola yoooola    8 7月  22 22:02 lib -> usr/lib//
drwxr-xr-x 4 yoooola yoooola 4096 7月  22 20:18 usr/

改变完以后

# 改变链接前

yoooola@HR000000299:~/WorkSpace/lubanCat$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc \
oooola/WorkSpace>   --sysroot=/home/yoooola/WorkSpace/lubanCat/rootFS \
oola/WorkSpace/lubanCat/rootFS/u>   -L/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu \
>   -Wl,-rpath-link=/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu \
t>   test.c -o test
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: 没有那个文件或目录
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: 没有那个文件或目录
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find /lib/aarch64-linux-gnu/libc.so.6 inside /home/yoooola/WorkSpace/lubanCat/rootFS
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find /lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 inside /home/yoooola/WorkSpace/lubanCat/rootFS
collect2: 错误: ld 返回 1

# 改变链接后

yoooola@HR000000299:~/WorkSpace/lubanCat$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc   --sysroot=/home/yoooola/WorkSpace/lubanCat/rootFS   -L/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu   -Wl,-rpath-link=/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu   test.c -o test
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: 没有那个文件或目录
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: 没有那个文件或目录
collect2: 错误: ld 返回 1
# 创建测试的编译文件
yoooola@HR000000299:~/WorkSpace/lubanCat$ echo 'int main() { return 0; }' > test.c

yoooola@HR000000299:~/WorkSpace/lubanCat$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc \
oooola/WorkSpace>   --sysroot=/home/yoooola/WorkSpace/lubanCat/rootFS \
>   -Wl,--verbose \
>   test.c -o test 2>&1 | grep "attempt to open"
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/ccYQLa54.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open crtn.o failed/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: 没有那个文件或目录
# deepseek分析如下
# 从你的 -Wl,--verbose 输出可见,工具链在以下路径中搜索失败:

attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.so failed
attempt to open crtn.o failed

还是有问题,既然文件系统是在debian里面链接过去的,我想直接从底层硬链接过来如何

mkdir -p /home/yoooola/WorkSpace/lubanCat/rootFS/lib
rsync -avz --rsync-path="sudo rsync" --delete cat@192.168.0.113:/usr/lib /home/yoooola/WorkSpace/lubanCat/rootFS/lib
symlinks -rc ~/WorkSpace/lubanCat/rootFS

问题依旧

1.5 转变思路,对比成功和失败的路径的两者差异

拿可以进行编译的根目录环境和不能编译的根目录环境进行对比,看看问题出在哪里

# 自己从机器上拿到的环境
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc   --sysroot=/home/yoooola/WorkSpace/rootfs    -Wl,--verbose   test.c -o test 2>&1 | grep "attempt to open"
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/ccjijhhB.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open crtn.o failed/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory

# 从可以编译的rootfs上进行编译
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc   --sysroot=/home/yoooola/WorkSpace/rootfs    -Wl,--verbose   test.c -o test 2>&1 | grep "attempt to open"
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crti.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/ccPPhUtQ.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crtn.o succeeded

显著区别如下

# 失败的库文件查找路径
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed


# 成功的库文件路径
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crti.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crtn.o succeeded

所以,得出结论

  • 失踪的crt1.o,crti.o,libc.so,crtn.o是在系统目录下找到的
  • 是在这个目录下找到lib/aarch64-linux-gnu/8.3.0

继续排查自己是否有这个目录

# 野火官方的系统
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs$ ls  -l ~/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu/8.3.0
lrwxrwxrwx 1 yoooola yoooola 21 Jul 10  2023 /home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu/8.3.0 -> ../aarch64-linux-gnu/

# 自己从机器上同步的库文件,没有
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs$ ls usr/lib/aarch64-linux-gnu/8.3.0
ls: cannot access 'usr/lib/aarch64-linux-gnu/8.3.0': No such file or directory

# 去机器上看,也米有
cat@lubancat:/usr/lib/aarch64-linux-gnu$ ls 8.3.0
ls: cannot access '8.3.0': No such file or directory

所以是不是这里的问题呢?

# 手动链接一下
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu$ sudo ln -s ../aarch64-linux-gnu 8.3.0
[sudo] password for yoooola:

yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu$ ls -l 8.3.0
lrwxrwxrwx 1 root root 20 Jul 23 00:39 8.3.0 -> ../aarch64-linux-gnu

# 再次编译,成功
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc   --sysroot=/home/yoooola/WorkSpace/rootfs    -Wl,--verbose   test.c -o test 2>&1 | grep "attempt to open"
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crti.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/cc8reunE.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crtn.o succeeded

问题解决

# 同理,如果使用aarch64-none-linux-gnu-10.2.1工具直接编译会失败
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/aarch64-none-linux-gnu-10.2.0/bin/aarch64-none-linux-gnu-gcc   --sysroot=/home/yoooola/WorkSpace/rootfs    -Wl,--verbose   test.c -o test 2>&1 | grep "attempt to open"
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/crtbegin.o succeeded
attempt to open /tmp/ccUAwAuW.o succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded

# 但是对roofs_debian11进行改造
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs_debian11/lib/aarch64-linux-gnu$ ln -s ../aarch64-linux-gnu 10.2.1
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs_debian11/lib$ ln -s aarch64-linux-gnu aarch64-none-linux-gnu、
# 检查软连接结果
yoooola@LAPTOP-7RPMJTMK:~$ ls -l ~/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1
lrwxrwxrwx 1 yoooola yoooola 20 Jul 23 01:12 /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1 -> ../aarch64-linux-gnu
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ ls -l ~/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu
lrwxrwxrwx 1 yoooola yoooola 17 Jul 23 01:17 /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu -> aarch64-linux-gnu

# 再次进行编译尝试,成功
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/aarch64-none-linux-gnu-10.2.1/bin/aarch64-none-linux-gnu-gcc   --sysroot=/home/yoooola/WorkSpace/rootfs_debian11    -Wl,--verbose   test.c -o test 2>&1 | grep "attempt to open"
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/crti.o succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/crtbegin.o succeeded
attempt to open /tmp/ccxO7iuJ.o succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libc.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libc.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/ld-linux-aarch64.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/crtend.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/crtn.o succeeded

# 但是要注意的是include也得链接一下
yoooola@LAPTOP-7RPMJTMK:~$ ln -s ~/WorkSpace/rootfs_debian11/usr/include/aarch64-linux-gnu ~/WorkSpace/rootfs_debian11/usr/include/aarch64-none-linux-gnu
yoooola@LAPTOP-7RPMJTMK:~$ ls -l ~/WorkSpace/rootfs_debian11/usr/include/aarch64-none-linux-gnu
lrwxrwxrwx 1 yoooola yoooola 17 Jul 23 01:40 /home/yoooola/WorkSpace/rootfs_debian11/usr/include/aarch64-none-linux-gnu -> ~/WorkSpace/rootfs_debian11/usr/include/aarch64-linux-gnu

2. 问题总结

应该是路径理解问题

4. 期间遇到的错误与解决方法

4.1 cc1文件权限错误

# 报错如下
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc   --sysroot=/home/yoooola/WorkSpace/rootfs    -Wl,--verbose   test.c -o test 2>&1
aarch64-linux-gnu-gcc: error trying to exec 'cc1': execvp: No such file or directory

# 给与执行权限
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ sudo chown -R $USER:$USER /opt/gcc-aarch64-linux-gnu-8.3.0